JavaScript中如何根据数组生成指定结构的对象数组?
问题描述
给定数组:
arr1 = ['d1','d2','d3'];
希望生成如下格式的对象数组:
[{n1 : 'd1', n2:'d1', n3 : 'd1'}, {n1 : 'd2', n2:'d2', n3 : 'd2'}, {n1 : 'd3', n2:'d3', n3 : 'd3'}]
尝试了以下代码,但输出不符合预期:
arr1 = ['d1', 'd2', 'd3']; mapV = arr1.map((item, index, arr) => [{ n1: 'd1', n2: 'd1', n3: 'd3' }]); console.log(mapV);
实际输出:
[ [ { n1: 'd1', n2: 'd1', n3: 'd3' } ], [ { n1: 'd1', n2: 'd1', n3: 'd3' } ], [ { n1: 'd1', n2: 'd1', n3: 'd3' } ] ]
修正方案
代码存在两个问题:
map回调返回的是数组包裹的对象([{...}]),导致最终结果变成二维数组,而非目标的一维对象数组- 对象属性值写死为固定字符串,没有复用当前遍历的
item值
修正后的代码:
arr1 = ['d1', 'd2', 'd3']; mapV = arr1.map(item => ({ n1: item, n2: item, n3: item })); console.log(mapV);
说明:
- 移除对象外层的数组括号,直接返回单个对象,
map会自动将每个对象收集为一维数组元素 - 将
n1、n2、n3的属性值替换为当前遍历的item,确保每个对象的属性值对应原数组的对应元素
运行上述代码即可得到预期输出。
内容的提问来源于stack exchange,提问作者monk
相关产品推荐
相关产品推荐

