【问题标题】:Create an array of object from given array key从给定的数组键创建一个对象数组
【发布时间】:2020-09-04 04:02:27
【问题描述】:

我有这样的数组。

const test = [
    { student: { id : '1', Name: 'A' }, marks: {
 id: '2', Name: 'B'
} }, 
    { student: {
 id : '3', Name: 'C' }, marks: { id: '4', Name: 'D' } }
]

现在,从这个对象数组中,我正在尝试创建两个差异数组,它们将具有单独的学生和标记键。

const student = [{"student":{"Id": {value: "A"}}}, {"student":{"Id": {value: "B"}}}]

对于标记

const marks = [{"marks":{"Id": {value: "C"}}}, {"marks":{"Id": {value: "D"}}}]

所以,我在这里尝试的是

test.map((index,item) => {
    return [item.student] 
  })

谁能帮我解决这个问题?

谢谢。

【问题讨论】:

  • 一般来说,这是“不好的做法”(尤其是当您使用像 MongoDB 这样的数据库时)开始更改数据结构和嵌套 + 属性名称(idId)没有很多意义或语义的。在您的情况下,在更改 console.log(test[0].student.id) 之前(返回 1)。在console.log(student[0].student.Id.value) 之后(返回A 而不是1)。

标签: javascript arrays reactjs lodash


【解决方案1】:

您希望返回一个新对象,而不是子数组。

以下使用解构来简化返回的对象

const test = [
    { student: { id : '1', Name: 'A' }, marks: {
id: '2', Name: 'B'
} }, 
    { student: {
id : '3', Name: 'C' }, marks: { id: '4', Name: 'D' } }
]

const students = test.map(({student}) => ({student}))
const marks = test.map(({marks}) => ({marks}))

console.log(students)
console.log(marks)

【讨论】:

  • 是的,这个可以,但我也必须添加新属性,在这个属性中,它是值而不是 id 和名称。
  • 还有我如何从同一个地图函数中返回两个新对象。
  • 只是为了让我在评论中的回答更简单,请使用另一个 map()。或者创建两个数组然后使用forEach() 并将每个对象推送到关联数组
  • 至于其他属性...map(({student}) => ({student, someProperty: someValue}));
  • 所以,这将删除现有值并添加新的产权
猜你喜欢
  • 2019-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 2021-03-30
  • 2019-09-09
  • 1970-01-01
  • 2016-12-31
相关资源
最近更新 更多