根据数组过滤对象

3

我有一个类似这样的对象:

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

以下是一个这样形式的数组:

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

我希望能够根据给定的 arr 值来筛选 obj。也就是说,是否有一种方法,可能使用 filter 方法,将 obj 转换为以下格式:

const newObj = {
    abc: "Moon",
    def: "Earth",
    tuv: "Jupiter"
};
2个回答

7
您可以将具有所需属性的新对象映射到一个单独的对象并赋值。

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的方法吗? - Kalaschnik
这只是一种不同的方法,通过生成单个对象来实现,而不是使用单个对象/累加器进行reduce - Nina Scholz

6
你可以使用 .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
1
@Kalaschnik 我已经添加了对文档的引用。它详细描述了 reduce 的工作原理。 - Mohammad Usman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接