比较两个返回差异的数组

IT技术 javascript jquery arrays array-difference
2021-01-31 16:17:44

比较两个数组并返回差异的最快/最佳方法是什么?很像array_diff在 PHP 中。是否有一个简单的功能,或者我将不得不通过创建一个each()还是foreach循环?

6个回答

我知道这是一个老问题,但我想我会分享这个小技巧。

var diff = $(old_array).not(new_array).get();

diff现在包含old_array不在的内容new_array

如果数组包含对象,这会起作用吗?我正在尝试比较两个数组中的对象
2021-03-16 16:17:44
这是一个场景。这适用于$(['h','h','h','h','h']).not($(["a", "a", "a"]))但对于像$(['h','h','h','h','h']).not($(["a", "a", "a", "h"]))(注意数组中的最后一个“h”)之类的数组,它返回一个空数组。差价不予退还。因此,它是错误的。
2021-03-25 16:17:44
@VishnuNarang 我非常有信心 PHP 的 array_diff() 函数没有错误。
2021-04-03 16:17:44
@VishnuNarang 我认为您在这里误解了一些事情。首先数组差分是如何工作的,其次没有阅读 OP 提出的实际问题。让我们处理第一个误解。在您的第二个示例中返回一个空数组正是正确的结果。它返回第一个数组中的内容,而不是第二个数组中的内容(即什么都没有)。这是第一个数组和第二个数组之间的“差异”。其次,OP 要求使用像 PHP (array_diff) 这样的 jQuery 函数。就是这个!您通过 PHP 的 array_diff() 函数运行的示例也会生成一个空数组
2021-04-07 16:17:44
简短而甜蜜......就像我喜欢它......我用它$.merge()来连接特定顺序的差异......
2021-04-09 16:17:44

工作演示 http://jsfiddle.net/u9xES/

好的链接(Jquery 文档):http : //docs.jquery.com/Main_Page {你可以在这里搜索或阅读 API}

如果您希望在 JQuery 中做到这一点,希望这对您有所帮助。

警报到底提示了不常见元素的数组 Array 即 2 数组之间的差异。

如果我错过了什么,请让我知道,干杯!

代码

var array1 = [1, 2, 3, 4, 5, 6];
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var difference = [];

jQuery.grep(array2, function(el) {
        if (jQuery.inArray(el, array1) == -1) difference.push(el);
});

alert(" the difference is " + difference);​ // Changed variable name 
更优雅:简单 difference = $.grep(a1,function(x) {return $.inArray(x, a2) < 0})
2021-03-17 16:17:44
很好的答案。但是想指出您正在使用.greplike .each; 应该difference = $.grep(array2, function(el) { return $.inArray( el, array1 ) == -1; })
2021-03-21 16:17:44
小提琴@Jocelyndelalande的评论:jsfiddle.net/cqsLvxod
2021-03-22 16:17:44
这个方法很酷,但应该考虑array2的长度小于array1的情况
2021-04-09 16:17:44
伙计,你是爱 :) 我被困了大约 2 天,你把我带到了另一端。
2021-04-10 16:17:44

使用下划线作为:

_.difference(array1,array2)
@AlSki 它给出了所问问题的答案!比较两个数组并返回差异。
2021-03-20 16:17:44
这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论。
2021-03-22 16:17:44
@AlSki 当答案在几年后发布时,我认为发布一个涉及使用与所问问题不同的库的答案是合适的,因为这是问题的可能答案 - 不知道一种方式或另一个,如果 OP 或几年后访问该问题的其他人知道该图书馆。
2021-03-26 16:17:44
@anurag_29 问题是如何使用 jQuery 而不是下划线。
2021-04-04 16:17:44
var arrayDiff = function (firstArr, secondArr) {
    var i, o = [], fLen = firstArr.length, sLen = secondArr.length, len;


    if (fLen > sLen) {
        len = sLen;
    } else if (fLen < sLen) {
        len = fLen;
    } else {
        len = sLen;
    }
    for (i=0; i < len; i++) {
        if (firstArr[i] !== secondArr[i]) {
            o.push({idx: i, elem1: firstArr[i], elem2: secondArr[i]});  //idx: array index
        }
    }

    if (fLen > sLen) {  // first > second
        for (i=sLen; i< fLen; i++) {
            o.push({idx: i, 0: firstArr[i], 1: undefined});
        }
    } else if (fLen < sLen) {
        for (i=fLen; i< sLen; i++) {
            o.push({idx: i, 0: undefined, 1: secondArr[i]});
        }
    }    

    return o;
};
/** SUBTRACT ARRAYS **/
function subtractarrays(array1, array2){
    var difference = [];
    for( var i = 0; i < array1.length; i++ ) {
        if( $.inArray( array1[i], array2 ) == -1 ) {
                    difference.push(array1[i]);
        }
    }

    return difference;
}   

然后,您可以在代码中的任何位置调用该函数。

var I_like    = ["love", "sex", "food"];
var she_likes = ["love", "food"];

alert( "what I like and she does't like is: " + subtractarrays( I_like, she_likes ) ); //returns "Naughty"!

这适用于所有情况并避免上述方法中的问题。希望有帮助!