比较2个返回差异的数组

How*_*Gee 60 javascript arrays jquery array-difference

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

sup*_*nic 141

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

var diff = $(old_array).not(new_array).get();
Run Code Online (Sandbox Code Playgroud)

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

  • 简短而甜蜜..就像我喜欢它..我用`$ .merge()`来连接具体特定顺序的差异...... (2认同)
  • 这是一个场景.这适用于`$(['h','h','h','h','h']).not($(["a","a","a"]))但对于像'$(['h','h','h','h','h'])这样的数组.不是($(["a","a","a","h ")))`(注意数组中的最后一个"h")它返回一个空数组.不会返回差异.因此,它是错误的. (2认同)
  • @VishnuNarang我觉得你在这里误解了一些事情.首先,阵列差分是如何工作的,其次是不读OP所提出的实际问题.让我们处理第一个误解.在第二个示例中返回一个空数组是完全正确的结果.它返回第一个数组中的内容,即不在第二个数组中(即没有).这是第一个阵列和第二个阵列之间的"差异".其次,OP要求像PHP(array_diff)这样的jQuery函数.就是这个!您通过PHP的array_diff()函数运行的示例也会生成一个空数组 (2认同)

Tat*_*nit 66

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

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

希望如果您希望在JQuery中执行此操作,这将对您有所帮助.

最后的警报提示数组不常见的元素数组,即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 
Run Code Online (Sandbox Code Playgroud)

  • 更优雅:只是`差异= $ .grep(a1,函数(x){return $ .inArray(x,a2)<0})` (14认同)
  • 这个方法很酷,但是如果array2的长度小于array1,应该考虑这种情况 (8认同)
  • 很好的答案.但是想指出你使用的`.grep`就像`.each`; 应该是`difference = $ .grep(array2,function(el){return $ .inArray(el,array1)== -1;})` (2认同)

anu*_*_29 8

使用下划线:

_.difference(array1,array2)
Run Code Online (Sandbox Code Playgroud)

  • @AlSki它给出了问题的答案!比较两个数组并返回diff. (2认同)