子阵列具有特定值时删除数组元素

时间:2013-07-15 05:57:18

标签: javascript jquery arrays multidimensional-array

我有一个包含任意数量subarrays的数组,每个数组都包含两个值。

i.e: interestArray[[1, 5], [3, 8] ... ]

如何删除包含值[3,8]的subarray

我的代码是:

$('td', container).click(function(){
      if(!$(this).hasClass('purchased') && !$(this).hasClass('manu'))
      {
        var manuId = $(this).parent().children('td:first-child').data('manu-id');
        var typeId = $(this).data('type-id');
        if($(this).hasClass('interest'))
        {
          $(this).removeClass('interest');
          $(this).parent().children('td.manu').removeClass('interest');
          var index = interestArray.indexOf([manuId, typeId]);
          interestArray.splice(index, 1);
        } else {
          $(this).addClass('interest');
          $(this).parent().children('td.manu').addClass('interest');

          interestArray.push([manuId, typeId]);
        }
      //updateSurvey(interestsArray);
      console.log(interestArray)
      }
    })

以下部分不起作用,只删除第一个subarray

var index = interestArray.indexOf([manuId, typeId]);
interestArray.splice(index, 1);

3 个答案:

答案 0 :(得分:2)

这是符合您要求的通用方法:

var arr = [[1,2],[3,4],[5,6]];
var remove = [3,4];

for (var i=0; i<arr.length; i++) {
  if (arr[i][0] == remove[0] && arr[i][1] == remove[1]) {
    arr.splice(i, 1);
    break;
  }
}

console.log(arr); //=> [[1,2],[5,6]]

答案 1 :(得分:1)

对于一般方法,您可以filter数组:

var reducedArray = interestArray.filter(function (item) {
    return item[0] != manuId || item[1] != typeId;
});

您无法使用indexOf,因为它会查找相同的对象(不仅仅是等效对象)。

如果你运行的是没有Array.filter的早期版本的JS,那么链接到上面的filter doc页面上有一个很好的垫片。

答案 2 :(得分:0)

这是我的个人解决方案更完整,以避免多次进入和休息;上面看到的事情,如果数组是在删除条目之后它也避免了一个问题(它是基于jquery的,但如果你觉得它更舒服,你可以进行常规循环):

ADD [MyColumn] nvarchar(255)