我有
var a =[1 , 2, 3, 4, 5]
var b = [2, 3]
现在我想从使用inArray
中删除bif($.inArray(b, a) === 1)
a.remove(b);
这是对的吗?因为当我控制台时,它没有改变
答案 0 :(得分:3)
试试这可能会对你有帮助
function arr_diff(a1, a2)
{
var a=[], diff=[];
for(var i=0;i<a1.length;i++)
a[a1[i]]=true;
for(var i=0;i<a2.length;i++)
if(a[a2[i]]) delete a[a2[i]];
else a[a2[i]]=true;
for(var k in a)
diff.push(k);
return diff;
}
var a = [1,2,3,4,5,6]
var b = [2,3]
console.log(arr_diff(a,b));
答案 1 :(得分:2)
这里有几个错误。首先,jQuery的inArray
搜索元素,而不是subArrays。所以你可能想象你会发现
$.inArray([2, 3], [[1, 2], [2, 3], [3, 4], [4, 5]])
会产生1
,但实际上即使这样也不会有效,因为它遵循Array.prototype
标准并与参考相等进行比较。
它肯定不会将数组[2, 3]
视为[1, 2, 3, 4, 5]
的元素。
接下来,如果确实发现了该数组,Array.prototype
没有remove
函数。
您可能需要查看 Array.prototype.splice() 。
答案 2 :(得分:0)
以下是一个选项(arraysEqual()
来自this answer):
function arraysEqual(a, b) {
if (a === b) return true;
if (a == null || b == null) return false;
if (a.length != b.length) return false;
for (var i = 0; i < a.length; ++i) {
if (a[i] !== b[i]) return false;
}
return true;
}
for (var i = 0; i <= a.length - b.length; i++) {
var slice = a.slice(i, i + b.length);
if (arraysEqual(slice, b)) {
a.splice(i, b.length);
}
}
这会循环a
比较a
到b
的切片,并在找到匹配项时删除该切片。