Array包含其他数组中的所有元素

时间:2014-11-11 14:37:37

标签: javascript arrays node.js coffeescript

一直试图弄清楚如何做到这一点,但还没有取得任何成功。如果我有这样的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'

1 个答案:

答案 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规范声明不需要)