我想要做的非常简单,并且有一个我无法理解的语法错误:
我有一个包含一些对象的数组,我想使用这些对象的某些值创建另一个数组:
let fields = [{type:'a',label:'email'},{type:'b',label:'name'},{type:'a',label:'tel'}]
let respone = []
// different implementation
fields.map(item => {
respone.push({item.label: ''}) } )
`Uncaught SyntaxError: Unexpected token .`
fields.map(item => {
respone = [...response, {item.label: ''}] } )
`Uncaught SyntaxError: Unexpected token .`
fields.map(item => {
respone = [...response, {item['label']: ''}] } )
`Uncaught SyntaxError: Unexpected token [`
Run Code Online (Sandbox Code Playgroud)
显然错误来自创建对象{item['label']: ''}。这些错误的原因是什么,从现有对象值创建新对象的最佳方法是什么。
所以你有一个对象数组,由type和组成label。您想使用该数组创建一个“复合对象”。首先,你不想respone成为一个数组,你想让它成为一个对象。其次,您想将键命名respone为 的值item.label。
试试这个代码:
let fields = [{type:'a',label:'email'},{type:'b',label:'name'},{type:'a',label:'tel'}]
// Create an empty object
let respone = {}
// Iterate over the fields array, using each one to set the key and value
// on our respone object.
fields.forEach(item => { respone[item.label] = item.type} );
// Let's see how it looks!
console.log(respone);Run Code Online (Sandbox Code Playgroud)
编辑:根据评论,使用它并没有真正意义.map()- 其目的是根据数组值返回一个新数组,通常是转换后的数据。在这种情况下,使用更有意义Array.forEach(...),代码已修改为此。