【问题标题】:Filter Object based on an array [duplicate]基于数组过滤对象[重复]
【发布时间】:2019-04-29 05:56:21
【问题描述】:

我有一个具有这种形式的对象:

const obj = {
    abc: "Moon",
    def: "Earth",
    asd: "Sun",
    dmg: "Venus",
    xyz: "Mars",
    tuv: "Jupiter"
};

还有一个具有这种形式的数组:

const arr = ["abc", "def", "tuv"];

我想根据arr 中给出的值过滤obj。这意味着,有没有办法,可能使用过滤方法,将obj 变成这样:

const newObj = {
    abc: "Moon",
    def: "Earth",
    tuv: "Jupiter"
};

【问题讨论】:

    标签: javascript arrays object filter


    【解决方案1】:

    您可以使用.reduce() 创建结果对象:

    const arr = ["abc", "def", "tuv"];
    const obj = {
        abc: "Moon",
        def: "Earth",
        asd: "Sun",
        dmg: "Venus",
        xyz: "Mars",
        tuv: "Jupiter"
    };
    
    const result = arr.reduce((r, c) => (r[c] = obj[c], r), {});
    
    console.log(result);

    【讨论】:

    • 完美!你能简单描述一下 reduce() 中的语法吗?
    • @Kalaschnik 我添加了对文档的引用。它详细描述了 reduce 的工作原理。
    【解决方案2】:

    您可以映射具有所需属性的新对象并将所有对象分配给单个对象。

    const
        object = { abc: "Moon", def: "Earth", asd: "Sun", dmg: "Venus", xyz: "Mars", tuv: "Jupiter" },
        array = ["abc", "def", "tuv"],
        result = Object.assign(...array.map(k => ({ [k]: object[k] })));
    
    console.log(result);

    【讨论】:

    • 谢谢,与@mohammad-usman 的方法相比有什么优势吗?
    • 这只是通过生成单个对象的不同方法,而不是使用reduce的单个对象/累加器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2020-12-11
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多