我有一个像这样的数组:
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/