首先,我很抱歉这可能与某个地方的另一个问题重复,但我不知道我的搜索中的措辞是否错误,但我找不到该问题的确切解决方案正在拥有,所以如果这是重复的,我提前表示歉意。
现在是问题。
我有一个对象数组,它具有各种属性。 然后我有另一个字符串数组,其中每个字符串代表对象数组中对象的属性名称。
我想创建一个新的对象数组,但数组中的对象仅具有名称来自字符串数组的属性。
我已经摆弄这个了几个小时了,但还没有真正让它按预期工作。我尝试过结合map和indexOf做一些Object.keys的东西,但我觉得我的逻辑中遗漏了一些东西,此时我只是不确定是什么。
所以基本上我有一个对象数组:
data = [
{
id: 1,
name: 'john',
value: 5
},
{
id: 2,
name: 'ben',
value: 10
},
{
id: 3,
name: 'lisa',
value: 12
},
];
还有一个字符串数组:
desiredKeys = ['id', 'name'];
我想创建一个新的对象数组,其中每个对象只有“id”和“name”属性。
这是一个笨蛋:
https://next.plnkr.co/edit/nU4Y85j7NFuFQqAx?open=lib%2Fapp.ts
我的目标是创建一个新的对象数组,但其中的对象仅具有“desiredKeys”数组中的属性,即:
[
{
id: 1,
name: 'john'
},
{
id: 2,
name: 'ben'
},
{
id: 3,
name: 'lisa'
},
];
欢迎任何提示,提前致谢!
最佳答案
您可以映射
数据数组并使用Object.fromEntries()
像这样:
const data=[{id:1,name:"john",value:5},{id:2,name:"ben",value:10},{id:3,name:"lisa",value:12},],
desiredKeys = ['id', 'name'];
const output = data.map(o =>
Object.fromEntries( desiredKeys.map(k => [k, o[k]]))
)
console.log(output)
如果不支持Object.fromEntries()
,您可以reduce
获取每个对象的子集的键:
const data=[{id:1,name:"john",value:5},{id:2,name:"ben",value:10},{id:3,name:"lisa",value:12},],
desiredKeys = ['id', 'name'];
const output = data.map(o =>
desiredKeys.reduce((a, k) => ({ ...a, [k]: o[k] }), {})
)
console.log(output)
关于javascript - 基于字符串数组修改数组中对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57303899/