首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在javascript中删除2D Array中的给定单元格

在javascript中删除2D Array中的给定单元格
EN

Stack Overflow用户
提问于 2019-03-12 05:34:38
回答 3查看 58关注 0票数 0

给定一个数组和单元格索引,删除所有给定的单元格索引。

输入:

[[0,1,2,3,4,5],
 [0,1,2,3,4,5],
 [0,1,2,3,4,5]
]

单元格:

(0,1) (1,1),(2,4),(0,2)

预期输出:

[[0,3,4,5],
 [0,2,3,4,5],
 [0,1,2,3,5]
]

当我试图删除时,原来的数组正在改变,所以我无法删除适当的索引。在一切都被移除之前,我们不应该改变数组。

  obj[key].forEach(element => {
    arr[element].splice(key, 1)
  });
EN

回答 3

Stack Overflow用户

发布于 2019-03-12 06:00:09

这不是最有效的解决方案,但这里有一个使用reducemap的快速而糟糕的解决方案

const input = [
  [0,1,2,3,4,5],
  [0,1,2,3,4,5],
  [0,1,2,3,4,5]
];

const removals = [[0,1], [1,1], [2,4], [0,2]];
const _ = {};
const output = removals
  .reduce((a, [x, y]) => (a[x][y] = _, a), input)
  .map(r => r.filter(c => c !== _));
output.forEach(r => console.log(...r));

通过在一次扫描中用占位符(_)标记要删除的单元格,然后在另一次扫描中返回以删除所有标记的单元格,我可以解决移动索引的问题。

另一种解决方案是在循环遍历索引之前对要删除的索引执行sort操作,然后可以像往常一样对项执行splice操作。

const input = [
  [0,1,2,3,4,5],
  [0,1,2,3,4,5],
  [0,1,2,3,4,5]
];

const removals = [[0,1], [1,1], [2,4], [0,2]];
const output = removals
  .sort(([a, b], [c, d]) => d - b)
  .reduce((a, [x, y]) => (a[x].splice(y, 1), a), input);
output.forEach(r => console.log(...r));

票数 1
EN

Stack Overflow用户

发布于 2019-03-12 06:08:54

您可以按第二个索引降序对索引进行排序,因为splice会更改索引。

var array = [[0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5]],
    remove = [[0, 1], [1, 1], [2, 4], [0, 2]];
    
remove
    .sort((a, b) => b[1] - a[1])
    .forEach(([i, j]) => array[i].splice(j, 1));

array.map(a => console.log(...a));

票数 1
EN

Stack Overflow用户

发布于 2019-03-12 06:23:51

有点不同的方法。

let cellsToRemove = [
    [1, 2], //(0,1) + (0,2)
    [1], //(1,1)
    [4], //(2,4)
];
let arr = [
    [0, 1, 2, 3, 4, 5],
    [0, 1, 2, 3, 4, 5],
    [0, 1, 2, 3, 4, 5]
];


let newArr = [];
for (i = 0; i < arr.length; i++) {
    newArr.push(arr[i].filter((item) => {
        return !cellsToRemove[i].includes(item)
    }));
}
console.log(newArr);

我认为Terry的解决方案是最好的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55110757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档