javascript - 从数组中查找和删除项目的合适的数据结构或算法是什么

标签 javascript arrays filter

我有一个像这样的数组:

const numbers = [{p: 1}, {p: 2}, {p: 3}, {p: 2}];

现在我需要编写一个函数,它接受数字,根据该数字查找项目,返回它们并将它们从数组 number 中删除。我有一个非常基本的实现:

function f(n) {
    const filtered = numbers.filter((v) => {
        return v.p === n;
    });

    filtered.forEach((v) => {
        const index = numbers.indexOf(v);
        numbers.splice(index, 1);
    });

    return filtered;
}

console.log(f(1));    // [{p: 1}]
console.log(f(2));    // [{p: 2}, {p: 2}]
console.log(numbers); // [{p: 3}]

但我想知道是否可以通过 reduce 或其他方法来改进它,或者是否可能存在支持这种逻辑的数据结构而不是数组?

谢谢

最佳答案

从数组中的最后一个值开始使用reduceRight进行操作,那么拼接将是安全的:

const numbers = [{p: 1}, {p: 2}, {p: 3}, {p: 2}];

const f = val => numbers.reduceRight((arr, n, i) => {
  if (n.p === val) {
    numbers.splice(i, 1);
    arr.push(n);
  }
  return arr;
}, []);

console.log(f(1)); // [{p: 1}]
console.log(f(2)); // [{p: 2}, {p: 2}]
console.log('num', numbers); // [{p: 3}]

关于javascript - 从数组中查找和删除项目的合适的数据结构或算法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44655259/

相关文章:

php - Doctrine 实体对象到数组

c# - 通过 SQL Datagridview 的文本框过滤器 - 显示太多列(重复列)

javascript - 如何淡入和淡出水平滚动的内容?

javascript - 如何获取表格中选中的复选框的总数

java - 如何在循环中设置数组的 3 个连续位置和 RGB 值

filter - 如何在 tensorflow 上可视化学习到的过滤器

javascript - 使用 jQuery 根据搜索关键字过滤表数据

javascript - 为什么在过滤器中使用 if 语句而不是仅返回时会得到不同的输出

javascript - 我应该如何从 javascript/jquery 调用 cshtml 文件?

javascript - 循环遍历数组,并将子 JSON 转换为 observablearray?