我确信这很容易(我是初学者!),但我找不到解决方案。
我想从 .csv 文件中导入两个数组,然后比较两者并返回出现在 List1 上而不出现在 List2 上的值。所以 List1 减去 List2 = 我的结果。
List1 可能看起来像:100,200,300,400 和 List2 100,200。然后我想退回 300,400。
(如果列表 2 碰巧有一些不在列表 1 中的值,我希望它能够运行并且不会给出错误,但我认为它不会?)
提前感谢任何提示/指针或代码,如果你这么好:-)
我确信这很容易(我是初学者!),但我找不到解决方案。
我想从 .csv 文件中导入两个数组,然后比较两者并返回出现在 List1 上而不出现在 List2 上的值。所以 List1 减去 List2 = 我的结果。
List1 可能看起来像:100,200,300,400 和 List2 100,200。然后我想退回 300,400。
(如果列表 2 碰巧有一些不在列表 1 中的值,我希望它能够运行并且不会给出错误,但我认为它不会?)
提前感谢任何提示/指针或代码,如果你这么好:-)
假设您有 2 个带有,
分隔值的字符串,例如
var a= "100, 200, 400";
var b = "100, 200, 300";
您可以连接这些值,例如,使用String.split
将它们转换为数组:
var items = (a +","+ b).split(',');
Array.prototype.reduce
然后可以通过几种方式做到这一点
items.reduce(function(a,c){ var count = a.filter(function(item){ return item ===c; }).length; if(count<1 ) a.push(c); return a;},[]);
感谢您的回答!
恐怕这段代码仍然有点超出我的理解,所以我只是测试了各种选项,似乎给出预期结果而没有任何错误消息的那个是来自What is the faster or most beautiful way to compute使用 Javascript 数组的一组差异?,正如 Vache 正确指出的那样,即:
A = [100,200,300];
B = [100,200,500];
diff_set = {
ar : {},
diff : Array(),
remove_set : function(a) { ar = a; return this; },
remove: function (el) {
if(ar.indexOf(el)<0) this.diff.push(el);
}
};
A.forEach(diff_set.remove_set(B).remove,diff_set);
C = diff_set.diff;
最初由Xavi Ivars发布
感谢提供答案!!非常感激 :-)
这似乎有效:
var array1 = [100,200,300,400];
var array2 = [200,100,400];
function array_diff(arr1,arr2)
{
var x = Math.max(arr1.length,arr2.length);
for(var i = 0; i < x; i++)
{
if(typeof arr1[i] !== 'undefined' && arr2.indexOf(arr1[i]) !== -1)
arr1.splice(i,1);
if(typeof arr2[i] !== 'undefined' && arr1.indexOf(arr2[i]) !== -1)
arr1.splice(arr1.indexOf(arr2[i]),1);
}
return arr1;
}
console.log(array_diff(array1,array2));
我尽量避免使用Array.prototype.filter
,Array.prototype.reduce
因为它们与旧版浏览器不兼容。据我所知,Array.prototype.splice
有更好的支持。
如果您正在寻找速度提升,我可能是错的,但我认为事先对数组进行排序会加快速度indexOf
。