簡體   English   中英

在javascript中比較兩個數組,並使用缺少的元素和新的元素創建新的數組

[英]Comparing two arrays in javascript and creating new arrays with missing and new elements

比較兩個JavaScript數組並創建兩個缺少和新元素的新數組的最有效方法是什么? 數組元素將始終是字符串或數字,不能百分百確定它們將以任何方式排序。

var old_array = ['11', '13', '14', '18', '22', '23', '25'];
var new_array = ['11', '13', '15', '16', '17', '23', '25', '31'];
var missing_elements = [];
var new_elements = [];

/*
* some magic goes here
* which compares
* new_array with old_array
*/

console.log(missing_elements); // would produce ['14', '18', '22']
console.log(new_elements); // would produce ['15', '16', '17', '31']

謝謝一群!

Drew Noakes解決方案的代碼:

var old_array = ['11', '13', '14', '18', '22', '23', '25'];
var new_array = ['11', '13', '15', '16', '17', '23', '25', '31'];
var missing_elements = _.difference(old_array, new_array);
var new_elements = _.difference(new_array, old_array);

console.log(missing_elements); // would produce ['14', '18', '22']
console.log(new_elements); // would produce ['15', '16', '17', '31']

我將使用Underscore.js的交集差異函數。

排序將是最有效的(假設您沒有其他任何前提來進行優化):

var old_array_sorted = old_array.slice().sort(); // slicing for not mutating
var new_array_sorted = new_array.slice().sort(); // the original array

for (var o=0, n=0; o<old_array_sorted.length && n<new_array_sorted.length; ) {
    if (old_array_sorted[o] < new_array_sorted[n])
        missing_elements.push ( old_array_sorted[o++] );
    else if (old_array_sorted[o] > new_array_sorted[n])
        new_elements.push( new_array_sorted[n++] );
    else
        n++, o++;
}
[].push.apply(missing_elements, old_array_sorted.slice(o));
[].push.apply(new_elements, new_array_sorted.slice(n));

暫無
暫無

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

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