如何将数组值按索引匹配添加到另一数组的每个对象中?
问题分析与修正
代码错误原因
你的代码用了两层嵌套的forEach循环,这会让closed_status里的每个对象,都和str数组里的所有元素逐一组合,最终生成closed_status.length * str.length个对象(也就是3×3=9个),这就是冗余数据的来源。
你需要的是按数组索引一一匹配,即closed_status[0]对应str[0]、closed_status[1]对应str[1],以此类推,所以不能用嵌套循环,要利用数组的索引来关联两个数组的元素。
另外原代码里的project_Status: closed存在语法错误,键和字符串值都需要用引号包裹,正确写法是"project_Status": "closed",否则会导致代码无法正常运行。
修正后的代码
方案1:带索引的forEach实现
const closed_status = [{ "project_no": 5, "priority": 3, "s_status": "S8", "project_Status": "closed" }, { "project_no": 8, "priority": 1, "s_status": "S5", "project_Status": "closed" }, { "project_no": 12, "priority": 2, "s_status": "S2", "project_Status": "closed" } ]; const str = [ "Value 1", "Value 2", "Value 3", ]; let result = []; closed_status.forEach((obj, index) => { // 按索引匹配元素,同时处理两个数组长度不一致的情况 const newValue = index < str.length ? str[index] : null; result.push({ ...obj, newValue }); });
方案2:map方法实现(更简洁)
map方法天生适合这种“将原数组每个元素转换为新元素”的场景,代码更紧凑:
const closed_status = [{ "project_no": 5, "priority": 3, "s_status": "S8", "project_Status": "closed" }, { "project_no": 8, "priority": 1, "s_status": "S5", "project_Status": "closed" }, { "project_no": 12, "priority": 2, "s_status": "S2", "project_Status": "closed" } ]; const str = [ "Value 1", "Value 2", "Value 3", ]; const result = closed_status.map((obj, index) => ({ ...obj, newValue: index < str.length ? str[index] : null }));
内容的提问来源于stack exchange,提问作者user14738399
相关产品推荐
相关产品推荐

