如何比较节点js中的两个数组?

时间:2012-11-23 05:36:42

标签: javascript node.js

我有两个数组,我怎么能一次比较两个数组。

   var arr1= ["a","b","c"];
   var arr2 = ["a","c","d"]

   if(arr1 == arr2){
      console.log(true);
    }else{
      console.log(false);
    }

8 个答案:

答案 0 :(得分:11)

var arr1 = ["a","b","c"];
var arr2 = ["a","c","d"];

if (arr1.length == arr2.length
    && arr1.every(function(u, i) {
        return u === arr2[i];
    })
) {
   console.log(true);
} else {
   console.log(false);
}

边缘情况的旁注:

对于此类任务,

===通常被视为轻微损坏,因为NaN出现意外行为:

var arr1 = ["a",NaN,"b"];
var arr2 = ["a",NaN,"b"];

if (arr1.length == arr2.length
    && arr1.every(function(u, i) {
        return u === arr2[i];
    })
) {
   console.log(true);
} else {
   console.log(false);
}

上面的代码实际上记录false,因为NaN !== NaN。此外,===无法将+0-0区分开来。为了涵盖这两种情况,您可以使用更强大的比较,称为“egal”或“is”,这可以很容易地实现:

function is(a, b) {
    return a === b && (a !== 0 || 1 / a === 1 / b) // false for +0 vs -0
        || a !== a && b !== b; // true for NaN vs NaN
}

var arr1 = ["a",NaN,"b"];
var arr2 = ["a",NaN,"b"];

if (arr1.length == arr2.length
    && arr1.every(function(u, i) {
        // Use "is" instead of "==="
        return is(u, arr2[i]);
    })
) {
   console.log(true);
} else {
   console.log(false);
}

答案 1 :(得分:6)

我会为此使用underscore

var same = (_.difference(arr1, arr2).length == 0)

答案 2 :(得分:3)

[ES6]

最佳答案是好的&够了。

但是当你只想比较它的值是相同的时候你必须先对它进行排序。 这里不需要排序代码。

<div class="post">
  <img src="" alt="">
  <div class="postinr">
	<h3></h3>
  </div>
</div>

而且......我认为使用一些&#39;而不是每一个&#39;更好。

如果不相同,有些&#39;给你提前退出。 - 很早但很早;)

if(arr1.length == arr2.length && arr1.every((v) => arr2.indexOf(v) >= 0)) {
    console.log(true);
} else {
    console.log(false);
}

答案 3 :(得分:2)

这是另一个没有ES5 every

的人
function arrEq(arr1, arr2) {
  for (var i = 0; i < arr1.length; i++)
    if (arr1[i] != arr2[i])
      return false;
  return i == arr2.length;
}

答案 4 :(得分:1)

我想添加一些由Taihwan Hah&#39;制作的代码的修改。但无法发表评论(系统告诉我)

所以这是我的修改:

git filter-branch
基本上,我必须检查但是数组,因为我的数组不包含唯一的数字。

答案 5 :(得分:0)

我想稍微改善staackuser2的答案:

var same = (arr1.length === arr2.length) && (_.difference(arr1, arr2).length === 0)

var same = (_.difference(arr1, arr2).length === 0) && (_.difference(arr2, arr1).length === 0)

答案 6 :(得分:0)

最佳答案是好的,但我也考虑使用Array.prototype:

application.properties

如果您希望它也适用于NaN并区分+0和-0,最好使用此方法:

Array.prototype.equals = function (arr) {
    return this.length == arr.length && this.every((u, i) => u === arr[i]);
}

console.log([1,2,3].equals([1,2,3])); // true
console.log([1,2,3].equals([1,3,3])); // false
// BUT!
console.log(["a",NaN,"b"].equals(["a",NaN,"b"])); // false, because NaN !== NaN

答案 7 :(得分:0)

(虽然这个问题比 v9.0.0 早很多,但是)因为问题是关于 Node - 从 Node v9.0.0 开始,你可以使用内置的“util”模块的 isDeepStrictEqual(arr1, arr2) 来比较数组(或物体,或任何与此相关的东西)

const util = require('util');
let arr1 = [1,2,3];
let arr2 = [1,2,3];
let arr3 = [1,3,2];
console.log(util.isDeepStrictEqual(arr1, arr2)) // true
console.log(util.isDeepStrictEqual(arr1, arr3)) // false

也适用于 NaN