0

我确信这很容易(我是初学者!),但我找不到解决方案。

我想从 .csv 文件中导入两个数组,然后比较两者并返回出现在 List1 上而不出现在 List2 上的值。所以 List1 减去 List2 = 我的结果。

List1 可能看起来像:100,200,300,400 和 List2 100,200。然后我想退回 300,400。

(如果列表 2 碰巧有一些不在列表 1 中的值,我希望它能够运行并且不会给出错误,但我认为它不会?)

提前感谢任何提示/指针或代码,如果你这么好:-)

4

3 回答 3

0

假设您有 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;},[]);
于 2014-09-16T21:09:48.620 回答
0

感谢您的回答!

恐怕这段代码仍然有点超出我的理解,所以我只是测试了各种选项,似乎给出预期结果而没有任何错误消息的那个是来自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发布

感谢提供答案!!非常感激 :-)

于 2014-09-17T23:11:40.490 回答
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.filterArray.prototype.reduce因为它们与旧版浏览器不兼容。据我所知,Array.prototype.splice有更好的支持。

如果您正在寻找速度提升,我可能是错的,但我认为事先对数组进行排序会加快速度indexOf

http://jsfiddle.net/0tcyam2f/1/

于 2014-09-16T21:34:23.800 回答