Javascript Arrays - 检查相同内容的两个对象数组,忽略顺序

Che*_*tan 13 javascript arrays comparison compare

我有两个JavaScript数组(AB)包含我创建的对象.我想检查数组A中的所有对象是否包含在数组中B,但不一定按相同的顺序.

做这个的最好方式是什么?

编辑:

它们都是实际的对象,而不是原始对象,所以我还需要比较它们的内容和结构(可能使用类似的东西JSON.stringify).

我想这样做是因为我正在学习测试驱动开发,我想测试返回对象列表的函数.我需要测试返回的列表是否包含预期的对象(在这种情况下顺序无关紧要).

Jar*_*nen 5

使用 ES6,您可以使用 every 和 some(以及长度)。

\n\n
let A = [1, 2, 3];\nlet B = [2, 3, 1];\n\n// all objects in A are contained in B (A \xe2\x8a\x86 B)\n// you can compare a <-> b however you'd like (here just `a === b`)\nlet AsubB = A.every(a => B.some(b => a === b));\n\n// A and B are the same length\nlet sameLength = A.length === B.length;\n\n// their contents are as equal as previously tested:\nlet equal = AsubB && sameLength;\n
Run Code Online (Sandbox Code Playgroud)\n

  • 即使使用两个方向,检查包含性也不会考虑多个相等的元素;例如,考虑 [1,2,3,3] 和 [1,2,2,3]。 (3认同)

gbl*_*zex 3

用法: isEqArrays(arr1, arr2)

//
// Array comparsion
//

function inArray(array, el) {
  for ( var i = array.length; i--; ) {
    if ( array[i] === el ) return true;
  }
  return false;
}

function isEqArrays(arr1, arr2) {
  if ( arr1.length !== arr2.length ) {
    return false;
  }
  for ( var i = arr1.length; i--; ) {
    if ( !inArray( arr2, arr1[i] ) ) {
      return false;
    }
  }
  return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 此代码不起作用:“isEqArrays([0, 0, 1], [0, 1, 1])”返回“true”。 (7认同)