Comparing maps and arrays
In javascript it’s easy to compare simple types but the same doesn’t apply to maps or arrays. Let’s take some examples:
var a = {
"name": "Line",
"points": {
"start": {
"x": 5,
"y": 10
},
"end": {
"x": 15,
"y": 25
}
}
};
var b = {
"name": "Line",
"points": {
"start": {
"x": 5,
"y": 10
},
"end": {
"x": 15,
"y": 25
}
}
}
The map a and b are almost equal but if you compare them:
> a == b
false
> 1 == 1
true
> "a" = "a"
true
The reason is that a and b are different objects despite having the same keys, strutucture and values. The only way to compare is to compare key by key and value by value. In OpenAF the function compare does just that:
> compare(a, b)
true
>
> p.points.start.x = 0
> p.points.start.y = 0
>
> compare(a, b)
false
Using the openaf console you can actually see the difference:
> diff a with b
- "x": 5,
- "y": 10
+ "x": 0,
+ "y": 0
Comparing arrays
What about arrays? Well, they are also objects. Alone (e.g. [1, 2, 3]) or mixed (e.g. { a: 1, b: [ 1, 2, 3]}). So you can use the compare function in the same way:
> compare([1, 2, 3], [1, 2, 3])
true
> compare([0, 1, 2, 3, 4], [1, 2, 3])
false