JavaScript如何合并多个对象去除索引键,生成指定结构的目标对象
问题疏漏
Object.assign传入数组作为源参数时,会将数组的数字索引作为键,对应索引的元素作为值合并到目标对象,这是输出出现0、1、2键的核心原因。- 你代码中
fields: Object.assign({}, builtFields)不是合法的变量赋值写法,且你已经声明fields为存储字段名的数组,同名变量赋值会产生冲突。
修复实现
方案1:调整Object.assign传参
将存储多个小对象的数组展开,把每个小对象作为独立参数传入Object.assign即可:
const fieldKeys = [ 'name', 'age', 'address' ]; const builtFields = [] for (let i = 0; i < fieldKeys.length; i++) { builtFields.push( { [fieldKeys[i]]: { type: '' } } ) } // 展开数组作为参数 const fields = Object.assign({}, ...builtFields) console.log(fields)
方案2:直接构建目标对象(更推荐)
无需先存数组再合并,直接初始化空对象循环赋值,性能更高代码更简洁:
const fieldKeys = [ 'name', 'age', 'address' ]; const fields = {} fieldKeys.forEach(key => { fields[key] = { type: '' } }) console.log(fields)
两种实现的输出均符合预期:
{ name: { type: '' }, age: { type: '' }, address: { type: '' } }
内容的提问来源于stack exchange,提问作者x-ray
相关产品推荐
相关产品推荐

