簡體   English   中英

如何比較節點js中的兩個數組?

[英]How to compare two arrays in node js?

我有兩個陣列,我怎樣才能一次比較這兩個陣列。

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

   if(arr1 == arr2){
      console.log(true);
    }else{
      console.log(false);
    }
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);
}

我將為此使用下划線

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

[ES6]

最佳答案是足夠的。

但是,當您只想比較其值時,必須先對其進行排序。 這里不需要排序代碼。

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

我認為使用“一些”而不是“每個”會更好。

如果不一樣,“一些”可以讓您提前退出。 -很少但很早;)

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

這是另一個, every沒有ES5:

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

我想對“ Taihwan Hah”所做的代碼進行一些修改,但無法發表評論(系統告訴我)

所以這是我的修飾語:

function ArrayEquals(arr1,arr2){
    return arr1.length === arr2.length && !arr1.some((v) => arr2.indexOf(v) < 0) && !arr2.some((v) => arr1.indexOf(v) < 0);
}

基本上,我必須檢查but數組,因為我的數組不包含唯一數字。

我想稍微改善staackuser2的答案:

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

要么

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

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

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

如果您希望它也適用於NaN並區分+0和-0,則最好使用以下命令:

Array.prototype.equals = function (arr) {
    function is(a, b) { // taken from the top answer
        return a === b && (a !== 0 || 1 / a === 1 / b) // false for +0 vs -0
            || a !== a && b !== b; // true for NaN vs NaN
    }
    return this.length == arr.length && this.every((u, i) => is(u, arr[i]));
}

console.log(["a",NaN,"b"].equals(["a",NaN,"b"])); // true

(雖然這個問題比 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM