javascript - 如何在 JavaScript 中使用过滤器从多维数组中删除多个元素?

标签 javascript arrays multidimensional-array

我们可以使用 filter 函数从数组中过滤掉单个值,如下所示:

var possi = [
        ['1','2','3'], ['4','5','6'], ['7','8','9'], ['1','4','7'], 
        ['2','5','8'], ['3','6','9'], ['1','5','9'], ['3','5','7']
    ];

var remove = '1';

possi = possi.filter(function(p){
    return p.indexOf(remove) === -1;
});

结果是:

[ [ '4', '5', '6' ],
  [ '7', '8', '9' ],
  [ '2', '5', '8' ],
  [ '3', '6', '9' ],
  [ '3', '5', '7' ] ]

但是如果我们有多个元素要删除,也就是说,如果我们有:

var remove = ['1', '6'];

如何检查 remove 元素是否存在于 possi 中并过滤掉匹配的 possi 元素?

此外,在这种情况下,其他函数(例如 mapreduce)是否是更好的解决方案?

最佳答案

如果您想删除 possi 中与数组 remove 任何元素匹配的所有数组,您可以组合 Array.prototype.filter()Array.prototype.some() :

var possi = [
  ['1', '2', '3'],
  ['4', '5', '6'],
  ['7', '8', '9'],
  ['1', '4', '7'],
  ['2', '5', '8'],
  ['3', '6', '9'],
  ['1', '5', '9'],
  ['3', '5', '7']
];

var remove = ['1', '6'];

possi = possi.filter(function(p) {
  return !p.some(function(v) {
    return remove.indexOf(v) !== -1;
  });
});

console.log(possi);

结果是:

[
  ['7', '8', '9'],
  ['2', '5', '8'],
  ['3', '5', '7']
]

关于javascript - 如何在 JavaScript 中使用过滤器从多维数组中删除多个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32456732/

相关文章:

javascript - 如何在三个div之间切换?可能使用 jquery 解决方案?

javascript - 创建一页视差样式,封面背景

javascript - 在选择标签上出现 ng-model 问题,但在其他地方没有问题

javascript - 为什么要避免使用 "is"和 "is not"?

javascript - JS如何连接数组的数组

java - 在整数数组中查找缺失的数字

c - 如何按值而不是引用添加字符串

c# - 在 WPF 中显示多维数据

php - 删除数组中的重复项以及按相反顺序 PHP Laravel

php - 计算多维数组中的元素?