簡體   English   中英

使用 javascript 比較兩個數組並刪除相同的值

[英]Compare two array and remove if same value using javascript

我有兩個 arrays,名為arrar 假設ar有 7 個元素, arr有 6 個元素。 如果兩者相同,我想刪除一個元素,否則將其分配給一個新變量。 到目前為止我有這個:

var arr = new Array(); // Elements are 65,66,67,68,69,70
var newID = new Array();  
var ar = new Array(); // 64,65,66,67,68,69,70

if (ar.length != arr.length) {
                for (var i = 0; i < arr.length; i++) {
                    for (var j = 0; j < ar.length; j++) {
                        if (arr[i] == ar[j]) {
                            delete ar[i];
                            arr.splice(i, 1);
                            break;
                        }
                        newID = ar[i];
                    }
                }
                for (var i = 0; i < ar.length; i++) {
                    newID = ar[i];
                }

這不能正常工作,因為它將與未定義的值進行比較。 請幫我改正。

您可以嘗試以下方法:

 var arr = [1, 2, 3, 4, 5, 6, 7]; var ar = [2, 4, 6, 8, 10]; var newID = []; for(var i = 0; i < arr.length; i++){ for(var j = 0; j < ar.length; j++){ if(arr[i] == ar[j]){ newID.push(arr[i]); arr.splice(i, 1); ar.splice(j, 1); break; } } } alert(arr); alert(ar); alert(newID); 

我將為您提供以下解決方案。

var ar = [1,2,3,4,5,6,7];
var arr = [3,6,7,8,9,2];

//ES5
var mergedArray = ar.concat(arr);
var newId = [];
for(var i=0;i<mergedArray.length;i++){
    var id = mergedArray[i];
    if(newId.indexOf(id) !== -1) continue;
    newId.push(id);
}
//or smartter
var newId = ar.concat(arr).filter(function(id, pos, self) {
    return self.indexOf(id) === pos;
});
//or ES6
var mergedArray = ar.concat(arr);
var newId = [];
for(let id of mergedArray){
    if(newId.indexOf(id) !== -1) continue;
    newId.push(id);
}
//or smarter ES6
var newId = ar.concat(arr).filter((id, pos, self) => self.indexOf(id) === pos);

這是你的選擇。 :)

這是另一個使用reduce

 var arr1 = [1, 2, 3, 4, 5]; var arr2 = [1, 3, 5, 7, 9]; var result = arr1.reduce(function (prev, value) { var isDuplicate = false; for (var i = 0; i < arr2.length; i++) { if (value == arr2[i]) { isDuplicate = true; break; } } if (!isDuplicate) { prev.push(value); } return prev; }, []); alert(JSON.stringify(result.concat(arr2))); 

EDITED

 var arr1 = [1, 2, 3, 4, 5]; var arr2 = [1, 3, 5, 7, 9]; arr2 = arr2.reduce(function (prev, value) { var isDuplicate = false; for (var i = 0; i < arr1.length; i++) { if (value == arr1[i]) { isDuplicate = true; break; } } if (!isDuplicate) { prev.push(value); } return prev; }, []); alert(JSON.stringify(arr2)); 

 var arr = [1, 2, 2, 3, 4, 5, 6, 7]; var ar = [2, 4, 6, 8, 10]; var combinearray = [...arr, ...ar] var newArr = new Set(combinearray); console.log(...newArr)

我只想添加一個js庫lodash

var _ = require('lodash');

var array1 = [1,2,3,4,5];
var array2 = [3,1,5];

_.difference(array1,array2)
// returns [ 2, 4 ]

暫無
暫無

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

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