在javascript中从多维数组中删除一列
Deleting a column from a multidimensional array in javascript
我有一个2D数组:
var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]]
我想删除这个数组的整个列(即删除每个数组中的每三个元素)。
这里和这里都有解决方案,但它们都不是在javascript中,所以我有麻烦的情况。
解决这个问题的最好方法是什么?我不想使用。splice(),因为在某些情况下,我将删除多个列,而。splice()方法将改变数组的长度,所以我最终访问了越界。谢谢!
尝试使用slice
。它不会改变对原始array
的任何更改
var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]]
var x = array.map(function(val) {
return val.slice(0, -1);
});
console.log(x); // [[a,b],[a,b],[a,b]]
这个函数不使用splice,它会删除你想要的任何列:
function removeEl(array, remIdx) {
return array.map(function(arr) {
return arr.filter(function(el,idx){return idx !== remIdx});
});
};
希望这是你正在寻找的
遍历数组并拼接每个子数组:
var idx = 2;
for(var i = 0 ; i < array.length ; i++)
{
array[i].splice(idx,1);
}
JSFiddle .
编辑:我看到你不想使用splice
由于越界问题和数组长度的变化。所以:
1。你可以检查你是否越界并跳过切片。
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 。
您可以使用filter
来删除列,而无需修改原始数组。
var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]]
var removeIndex = 1
const filtered = array.map(v => v.filter((_, i) => i !== 1))
// output: [["a", "c"], ["a", "c"], ["a", "c"]]
您也可以使用相同的方法删除多个列。
var array = [["a", "b", "c"],["a", "b", "c"],["a", "b", "c"]]
var removeIndexes = [0, 2]
const filtered = array.map(v => v.filter((_, i) => !removeIndexes.includes(i)))
// output: [["b"], ["b"], ["b"]]
为您的解决方案使用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数组中删除项。原因是delete将丢弃项,但不更新内部长度变量。
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
很酷。它会在删除元素时调整数组的大小,这样你就不会得到空值。因此,使用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
中使用slice
方法。下面是一个例子:
let arrayA = ['a', 'b', 'c', 'd']
let arrayB = arrayA.map((val) => {
return val.slice()
})
arrayB[2] = 'Z';
console.log('--------- Array A ---------')
console.log(arrayA)
console.log('--------- Array B ---------')
console.log(arrayB)
注意:在Angular 10
中,我使用了不同的方法来获得数组的独立副本,但都失败了。以下是其中一些:
arrayB.push(arrayA) // failed
arrayB = Object.create(arrayA) // failed
arrayB = arrayA.splice() // failed
所有失败的方法都在复制引用和数据
相关文章:
- 柱状图后面的一列
- 数据表通过分析一列的值对其进行排序
- Datatables-如何在未显示所有列的情况下禁用表中最后一列的排序
- 获取表中每行的一列的内容,然后循环访问每个内容
- 对象数组-与其他列数据相比,增加一列
- 在最初的查询/表格绘制中只提取谷歌电子表格的一列
- jQuery Datatables:单击一列时对另一列进行排序
- 我的砖石图像只显示在一列中
- 删除“;使用javascript从pentaho中的一列中选择“[”
- 使用 Javascript 在一列中更改属性内容
- 通过找到一种删除许多 if 语句的方法来简化代码
- jquery插件 - 已选择 - 多项选择不在一行中列出,而是列在一列中
- 单击包含按钮的最后一列时获取表的第一列值
- 如何使用 jquery 删除 HTML 表中的最后一列
- 谷歌可视化:如何从数据表中删除一列
- 在javascript中从多维数组中删除一列
- 如果标题为None,隐藏/删除最后一列
- 如何删除具有不同列的html表的最后一列
- 如何从mysql数据库中删除一列,当它显示在一个jquery对话框与ajax的while循环
- 从一开始删除一个字符散列/磅符号