比赛结束后从阵列中移除物品
这个问题在这里已经有了答案:
试试这可能对你有帮助
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));
这里有几个错误。 首先,jQuery的inArray
搜索元素,而不是subArrays。 所以你可以想象,你会发现
$.inArray([2, 3], [[1, 2], [2, 3], [3, 4], [4, 5]])
会产生1
,但事实上即使这样也行不通,因为它遵循Array.prototype
标准并与参考平等相比较。
它当然不会找到数组[2, 3]
作为[1, 2, 3, 4, 5]
[2, 3]
一个元素。
接下来,如果确实发现了该数组, Array.prototype
没有remove
函数。
你可能想看看Array.prototype.splice() 。
这里有一个选项(从这个答案中借用的arraysEqual()
):
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
,当找到匹配去除片。