一直试图弄清楚如何做到这一点,但还没有取得任何成功。如果我有这样的2个数组:
array1 = [
{ name: 'John', age : 25},
{ name: 'Jane', age : 58}
]
array2 = [
{ name: 'Jane', age : 58},
{ name: 'John', age : 25}
]
如果array1
包含array2
的所有元素,我该怎么办?注意 - 排序无关紧要,我希望能够写出这样的东西:
if array1.containsAll array2
console.log 'array1 contains all of the elements in array2'
else
console.log 'array1 does not contain all of the elements in array2'
我尝试过使用contains
函数,但是出现了这样的错误:
Object .... has no method 'contains'
答案 0 :(得分:1)
我怀疑这种方法具有良好的性能,但它应该非常强大,并且理解起来非常简单......
# sort function to marshall data into consistent format
sortfunc = (a,b)-> JSON.stringify(a) < JSON.stringify(b)
# if serialized, sorted arrays are equal, then all items are present
if JSON.stringify(array1.sort(sortfunc)) == JSON.stringify(array2.sort(sortfunc))
console.log "same"
else
console.log "different"
n.b。需要注意的是,对象键的顺序可能是也可能不重要,具体取决于JS引擎是否遵守对象索引顺序(JS规范声明不需要)