比较两个数组并返回差异的最快/最佳方法是什么?很像array_diff
在 PHP 中。是否有一个简单的功能,或者我将不得不通过创建一个each()
?还是foreach
循环?
比较两个返回差异的数组
IT技术
javascript
jquery
arrays
array-difference
2021-01-31 16:17:44
6个回答
我知道这是一个老问题,但我想我会分享这个小技巧。
var diff = $(old_array).not(new_array).get();
diff
现在包含old_array
不在的内容new_array
工作演示 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(array1,array2)
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"!
这适用于所有情况并避免上述方法中的问题。希望有帮助!