在javascript中从多维数组中删除列

我有一个2D数组:

var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]] 

我想删除这个数组的整个列(即删除每个数组中的每个第三个元素)。

这里和这里都有解决方案,但它们都不是javascript,所以我遇到了麻烦。

解决这个问题的最佳方法是什么? 我不想使用.splice(),因为在某些情况下我将删除多个列,而.splice()方法将改变数组的长度,因此我最终访问越界。

谢谢!

尝试使用slice 。 它不会改变对原始array任何更改

 var x = array.map(function(val){ return val.slice(0, -1); }); console.log(x); // [[a,b],[a,b],[a,b]] 

遍历数组并拼接每个子数组:

 var idx = 2; for(var i = 0 ; i < array.length ; i++) { array[i].splice(idx,1); } 

JSFiddle 。

编辑 :我发现由于越界问题和数组长度的变化,我不想使用splice 。 所以:

你可以检查一下你是否超出界限并跳过切片。
2.您可以创建要删除的索引数组,只需从未出现在该数组中的索引创建新数组(而不是删除,创建具有相反条件的新数组)。

像这样的东西:

 var array = [ ["a", "b", "c"], ["a", "b", "c"], ["a", "b", "c"] ]; var idxToDelete = [0,2]; for (var i = 0; i < array.length; i++) { var temp = array[i]; array[i] = []; for(var j = 0 ; j < temp.length ; j++){ if(idxToDelete.indexOf(j) == -1) // dont delete { array[i].push(temp[j]); } } } 

新JSFiddle 。

splice很酷。 它会在删除数据时调整数组的大小,以免最终出现空值。 因此,使用splice,您只需遍历每一行并删除正确的元素。

 var removeCol = function(arr2d, colIndex) { for (var i = 0; i < arr2d.length; i++) { var row = arr2d[i]; row.splice(colIndex, 1); } } 

http://jsfiddle.net/eB8LD/

使用map函数和splice函数为您的解决方案。 像这样

 var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]]; array = array.map(function(item){ // the 0,2 tells the splice function to remove (skip) the last item in this array return item.splice(0,2); }); console.log(array); // [["a", "b"],["a", "b"],["a", "b",]]; 

不要使用delete来删除javascript数组中的项目。 原因是删除将抛出项目但不更新内部长度变量。

 var array = ["a", "b", "c"]; delete array[3]; console.log(array); // ["a", "b"] console.log(array.length); // 3 array = array.splice(0,2); console.log(array); // ["a", "b"] console.log(array.length); // 2 

使用splice设置正确的长度并删除数组的项目。

此函数不使用splice,它会删除您想要的任何列:

 function removeEl(array, remIdx) { return array.map(function(arr) { return arr.filter(function(el,idx){return idx !== remIdx}); }); }; 

希望这是你正在寻找的