[英]Comparing two arrays in javascript and creating new arrays with missing and new elements
What is the most efficient way to compare two javascript arrays and create two new arrays of missing and new elements? 比较两个JavaScript数组并创建两个缺少和新元素的新数组的最有效方法是什么? Array elements will be always strings or numbers and it is not 100% sure that they will be sorted in any way.
数组元素将始终是字符串或数字,不能百分百确定它们将以任何方式排序。
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']
Thanks a bunch! 谢谢一群!
The code to Drew Noakes' solution: 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']
Sorting will be the most efficient (assuming you don't have any other preconditions to base an optimization on): 排序将是最有效的(假设您没有其他任何前提来进行优化):
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.