我正在尝试编写一个接受对象数组的函数,仅选择对象中的特定键,然后仅将该数组的唯一值返回到新的“过滤”数组中。我试图使用Array.filter并不断收到错误消息,表明我的过滤数组未定义。我哪里出问题了?

const findUniques = function(arr) {


let rawArray = arr.map(res => res.id);

let filtered = rawArray.filter((id) => {
    return filtered.indexOf(id) === -1;
});
console.log(filtered)


};


这是我过滤过的数组的模拟。

1630489261, 1630489261, 1630489261, 1630489313, 1630489313, 1630489261, 1630489313, 1707502836, 1590711681, 1588295455, 1630489313, 1707502836, 1588295455, 1707502836, 1590711681, 1707502836, 1707502836, 1707502836, 1707502836, 1707502836, 1588295455, 1588295455


如果将filtered设置为全局变量,它将被填充,但不会被过滤。即rawArray中的所有内容都被过滤掉了。

最佳答案

使用Array#filter



rawArray = [1, 2, 3, 2, 3, 1, 4];

filtered = rawArray.filter((e, i) => rawArray.indexOf(e) === i);

console.log(filtered);





使用Array#reduce



let rawArray = [1, 2, 3, 2, 3, 1, 4],
filtered = rawArray.reduce(function (acc, item) {
    if (!acc.includes(item)){
        acc.push(item);
    }
    return acc;
}, []);
console.log(filtered);

10-04 16:23