3

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

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

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

我的代码是:

$('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);
4

3 回答 3

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]]
于 2013-07-15T06:02:56.950 回答
1

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

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

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

如果您正在运行没有 JS 的早期版本,那么上面链接的文档页面Array.filter上有一个很好的 shim 。filter

于 2013-07-15T06:00:36.610 回答
0

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

    $.each( answers, function( index, value ){
        if (typeof answers[index] != "undefined") 
        {
            if(answers[index]["question_id"]==answer_to_del)
            {
                delete answers[index];
            }
        }

    });
    //Clean answer array from empty values created above
    answers = answers.filter(function(n){ return n != undefined }); 
于 2018-02-28T00:38:37.687 回答