javascript - Create a new object in Angular 11 app based on values in another array of objects - Stack Overflow

I am having an Angular 11 app in which I have an array of objects as shown below.details = [{"nam

I am having an Angular 11 app in which I have an array of objects as shown below.

details = [
      {
        "name": "firstName",
        "content": "Tom"
      },
      {
        "name": "lastName",
        "content": "Smith"
      },
      {
        "name": "email",
        "content": "[email protected]"
      }
]

I want to create an object from above array as shown below.

output = {
   firstName: {value: "Tom"},
   lastName: {value: "Smith"},
   email: {value: "[email protected]"}
}

For simplicity I have only shown 3 objects in the details array but there can be any number of them. So I want the conversion to happen irrespective of the number of objects in the details array. How can I create the above output object? Please help me out.

I am having an Angular 11 app in which I have an array of objects as shown below.

details = [
      {
        "name": "firstName",
        "content": "Tom"
      },
      {
        "name": "lastName",
        "content": "Smith"
      },
      {
        "name": "email",
        "content": "[email protected]"
      }
]

I want to create an object from above array as shown below.

output = {
   firstName: {value: "Tom"},
   lastName: {value: "Smith"},
   email: {value: "[email protected]"}
}

For simplicity I have only shown 3 objects in the details array but there can be any number of them. So I want the conversion to happen irrespective of the number of objects in the details array. How can I create the above output object? Please help me out.

Share Improve this question edited Mar 25, 2021 at 14:17 suvenk asked Mar 25, 2021 at 13:46 suvenksuvenk 5171 gold badge11 silver badges28 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 3

you could do with Array#reduce.

const details = [ { "name": "firstName", "content": "Tom" }, { "name": "lastName", "content": "Smith" }, { "name": "email", "content": "[email protected]" } ];

const res = details.reduce(
    (acc, {name, content: value}) => (acc[name] = {value}, acc), {}
);

console.log(res)

Not that I'm against to the other answers proposed. As an alternative you can also do it with the help of a "for-of" loop and applying destructured assignment.

const details = [ { "name": "firstName", "content": "Tom" }, { "name": "lastName", "content": "Smith" }, { "name": "email", "content": "[email protected]" } ];
let result = {}
for ({ name: n, content: value } of details) { result[n] = { value: value }; }
console.log(result)

MDN Reference - Deconstructuring Assignment

Map the array to an array of [name, { value }] pairs, and convert to an object using Object.fromEntries().

With Typescript you'll need to set the target as ES2019 at least in your TS config, and it doesn't require any type definition (TS Playground).

const details = [{"name":"firstName","content":"Tom"},{"name":"lastName","content":"Smith"},{"name":"email","content":"[email protected]"}]

const result = Object.fromEntries(
  details.map(({ name, content: value }) => [name, { value }])
)

console.log(result)

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745226549a4617486.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信