如何基于两个JS数组生成键为name、target的指定结构对象数组
实现方案
原代码问题
- 声明的
result是普通对象,而你需要的输出是多个name/target结构对象组成的数组,基础数据结构类型不匹配 - 遍历过程中没有关联
v1数组的对应位置元素,也没有组装成要求的键值结构
正确实现
方式1:forEach 实现
var v = [1,2,3,4,5,6]; var v1 = ['A','B','C','D','E']; var result = []; // 初始化为数组存储多个对象 v.forEach((item, index) => { // 仅当v1对应索引有值时才生成对象,避免生成无效项 if (v1[index] !== undefined) { // 如果需要跳过值为3的项,和你给出的示例结果一致,可再加判断 if (item !== 3) result.push({ name: String(item), // 转为字符串匹配预期输出格式 target: v1[index] }) } }) console.log('ColResult', result);
方式2:更简洁的map实现
var v = [1,2,3,4,5,6]; var v1 = ['A','B','C','D','E']; // 先将v截断到和v1相同长度,再遍历映射为目标结构 const result = v.slice(0, v1.length).map((item, index) => ({ name: String(item), target: v1[index] }))
特殊场景适配
如果你给出的预期结果中{name: "4", target: "C"}是真实需求,确实要跳过v数组中值为3的项,只需要在遍历逻辑中加判断过滤即可,以forEach为例:
v.forEach((item, index) => { const v1Index = item > 3 ? index - 1 : index; if (v1[v1Index] !== undefined && item !== 3) { result.push({ name: String(item), target: v1[v1Index] }) } })
内容的提问来源于stack exchange,提问作者Neel
相关产品推荐
相关产品推荐

