首页 > 解决方案 > 用 map() 变换对象数组

问题描述

我无法理解 map () 方法是如何工作的,因为所有示例都带有数字,并且要理解我需要一个更具体的示例。所以我做了这个我有一个对象数组:

 let people = [
   {
     id: 1,
     name: 'jhon',
     last_name: 'wilson'
   },
   {
     id: 2,
     name: 'maria',
     last_name: 'anyway'
   },
   {
     id: 3,
     name: 'lastOne',
     last_name: 'example'
   }
];

我想了解如何people.map();更改 idk、名称?的第二个元素。
这就是我认为的map() 工作方式:

people.map(() => {
     people[1].name = prompt()
// At this point i don't know how continue
})

我正在自学,所以我会非常感谢你:)

标签: javascriptarraysstringdictionaryobject

解决方案


.map()函数将遍历整个数组,并且在该过程的每个步骤中,它将获取我们正在查看的当前项目并将其作为参数传递给函数。然后,您可以对该项目执行任何操作,并且从函数返回的任何内容都将替换数组中该位置的内容。

例如,对于您在问题中提供的数组,我们想删除nameandlast_name属性,并将它们组合成一个full_name属性。我们可以做到以下几点:

 let people = [
   {
     id: 1,
     name: 'jhon',
     last_name: 'wilson'
   },
   {
     id: 2,
     name: 'maria',
     last_name: 'anyway'
   },
     id: 3,
     name: 'lastOne',
     last_name: 'example'
   }
];

people = people.map((person) => {
  return {
    id: person.id,
    full_name: `${person.name} ${person.last_name}`
  }
});

这段代码运行后,我们的people数组将如下所示:

[
   {
     id: 1,
     full_name: 'jhon wilson'
   },
   {
     id: 2,
     full_name: 'maria anyway'
   },
     id: 3,
     name: 'lastOne example'
   }
];

您可以将其视为与此非常相似的事情:

function transformPerson(person) {
  return {
    id: person.id,
    full_name: `${person.name} ${person.last_name}`
  }
}

let newPeople = [];
for (let i = 0; i < people.length; i++) {
  newPeople[i] = transformPerson(people[i])
}

people = newPeople;

推荐阅读