12

2 つのアレイを使用していますが、2 つのアレイを一度に比較するにはどうすればよいですか。

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

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

8 に答える 8

20
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);
}

上記のコードはfalseNaN !== 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);
}
于 2012-11-23T05:52:14.693 に答える
5

これにはアンダースコアを使用します。

var same = (_.difference(arr1, arr2).length == 0)
于 2012-11-23T05:48:06.517 に答える
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;
}
于 2015-02-16T11:33:32.673 に答える