如何从数组创建命名对象?代码输出不符预期求解决方案
问题解答
当然可以实现你想要的结果,先分析下原代码的问题:
- 你用
map时,返回的{item: ...}里的item是字面量属性名,不是变量,所以每个生成的对象键都是字符串"item"; - 而且
map会返回一个数组,每个元素是单独的对象,所以最终得到的是包含两个{item: ...}对象的数组,而不是你要的“单个对象包含两个字段,再放到数组里”。
下面是两种高效的实现方式:
方法1:使用Array.reduce构建对象
reduce可以遍历数组并逐步合并出目标对象,最后在外层包裹数组即可:
const field = ['name', 'address'] const data = [ field.reduce((result, key) => { result[key] = { mode: 'insensitive', sort: 'desc' } return result }, {}) ]
方法2:使用Object.fromEntries(更简洁)
Object.fromEntries可以直接把键值对数组转换成对象,搭配map生成键值对数组,代码更简洁:
const field = ['name', 'address'] const data = [ Object.fromEntries( field.map(key => [key, { mode: 'insensitive', sort: 'desc' }]) ) ]
以上两种方法运行后,data的结果都会符合你的预期:
[ { name: { mode: 'insensitive', sort: 'desc' }, address: { mode: 'insensitive', sort: 'desc' } } ]
内容的提问来源于stack exchange,提问作者Lutfi Khoirudin
相关产品推荐
相关产品推荐

