匹配后从数组中删除项目

时间:2014-02-04 18:44:25

标签: javascript jquery arrays

我有

var a =[1 , 2, 3, 4, 5]
var b = [2, 3]

现在我想从使用inArray

中删除b
if($.inArray(b, a) === 1)
  a.remove(b);

这是对的吗?因为当我控制台时,它没有改变

3 个答案:

答案 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比较ab的切片,并在找到匹配项时删除该切片。