javascript无法映射具有嵌套值的对象数组

cor*_*rry 0 javascript arrays mapping javascript-objects typescript

尝试使用嵌套在子对象结构中的值来映射对象数组:

const objs = [{
        "B": {
            "value": 1,
        },
        "D": {
            "value": "45"
        },
        "E": {
            "value": "234"
        },
        "A": {
            "value": "543"
        },
        "C": {
            "value": "250"
        }
    },...]
Run Code Online (Sandbox Code Playgroud)

结构如下:

[
  { name: 'B', value: 1 }, 
  { name: 'D', value: '45' }, 
  { name: 'E', value: '234' }, 
  { name: 'A', value: '543' },
  { name: 'C', value: '250' }
]
Run Code Online (Sandbox Code Playgroud)

映射的结果是 undefined

const mapped = objs.map((key, index) => {
  Object.keys(key).map(el => ({
    name: el
  }))
})
Run Code Online (Sandbox Code Playgroud)

示例:Stackblitz

ant*_*nku 5

您缺少return声明和value属性定义。

此外,您可能想使用flatMap而不是map以避免结果中出现嵌套数组:

const objs = [{
    "B": {
        "value": 1,
    },
    "D": {
        "value": "45"
    },
    "E": {
        "value": "234"
    },
    "A": {
        "value": "543"
    },
    "C": {
        "value": "250"
    }
}]

const mapped = objs.flatMap((key, index) => {
    return Object.keys(key).map(el => ({
        name: el,
        value: key[el].value
    }))
})

console.log(mapped)
Run Code Online (Sandbox Code Playgroud)


小智 5

您应该对objs [0]而不是objs进行操作,因为它是一个对象的数组,而不是对象的数组。

let array = []
for(let object in objs[0]){
array.push({
"name": object,
"value": objs[0][object].value
})
}
Run Code Online (Sandbox Code Playgroud)