javascript - 基于字符串数组修改数组中对象的属性

标签 javascript angular typescript

首先,我很抱歉这可能与某个地方的另一个问题重复,但我不知道我的搜索中的措辞是否错误,但我找不到该问题的确切解决方案正在拥有,所以如果这是重复的,我提前表示歉意。

现在是问题。

我有一个对象数组,它具有各种属性。 然后我有另一个字符串数组,其中每个字符串代表对象数组中对象的属性名称。

我想创建一个新的对象数组,但数组中的对象仅具有名称来自字符串数组的属性。

我已经摆弄这个了几个小时了,但还没有真正让它按预期工作。我尝试过结合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/

相关文章:

javascript - 如何在 JavaScript 中每 5 秒运行一个函数

angular - 按顺序处理请求

angular - 类型 'datetimepicker' 上不存在属性 'JQuery<HTMLElement>'

angular - 无法在 Angular Web 服务中解析 toPromise

angular - 在 typescript 中将类型作为值传递

javascript - 将变量传递给 AngularJS Controller ,最佳实践?

javascript - CanJS 将待办事项存储到文件中

javascript - 拖放期间从外部远程图像读取 URL 数据

css - Angular:如何将类添加到子组件的嵌套元素

node.js - ng start - 未知选项 : '--inspect-brk'