3

任意の数の を含む配列がありsubarrays、それぞれに正確に 2 つの値が含まれています。

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 に答える