我确信这很容易(我是初学者!),但我找不到解决方案。
我想从.csv文件中导入两个数组,然后比较两个数组并返回在List1上显示的值,而不是在List2上。所以List1减去List2 =我的结果。
List1可能看起来像:100,200,300,400和List2 100,200。然后我想返回300,400。
(如果List 2碰巧有一些不在List 1中的值,我还是希望它能够运行而不是出错,但我认为它不会?)
提前感谢任何提示/指针或代码,如果你这么善良: - )
答案 0 :(得分:0)
我们假设您有两个字符串,
分隔值,如
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;},[]);
答案 1 :(得分:0)
这似乎有效:
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
。
答案 2 :(得分:0)
感谢您的回答!
我担心这段代码仍然比我的理解还要严重,所以我只是测试了各种选项,似乎没有任何错误消息就能得到所需结果的那个是来自What is the fastest or most elegant way to compute a set difference using Javascript arrays? 的那个正如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
发布感谢您提供答案!!非常感谢: - )