首页 > 解决方案 > ES6 按唯一属性过滤对象

问题描述

我有一系列错误,每个错误都有一个非唯一的param属性。

我想根据param之前是否见过来过滤数组。

像这样的东西:

const filteredErrors = [];
let params = [];

for(let x = 0; x < errors.length; x++) {
    if(!params.includes(errors[x].param)) {
        params.push(errors[x].param);
        filteredErrors.push(errors[x]);
    }
}

但我不知道如何在 ES6 中做到这一点。

我可以获得唯一的参数const filteredParams = Array.from(new Set(errors.map(error => error.param))); ,但不能获得对象本身。

很确定这只是我对高阶函数理解的一个弱点,但我就是无法理解

标签: javascriptarrayshigher-order-functions

解决方案


您可以破坏param、检查params并将值添加到 params 并返回true以获取对象作为过滤结果。

结果,您将获得一组首次发现的相同类型的错误。

const
    params = [],
    filteredErrors = errors.filter(({ param }) =>
        !params.includes(param) && params.push(param));

推荐阅读