我有一个包含任意数量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);
答案 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)