如何在JavaScript中从两个等长数组创建新的数组对象?
JavaScript 从两个数组构建指定结构的对象
给定两个数组,对应索引的元素一一关联:
var array1 = ['one', 'two', 'one', 'two']; var array2 = ['3', '4', '5', '6'];
需要构建一个对象,以array1的元素作为键,将对应索引的array2元素按顺序归类存入,最终得到如下结构:
var arrayObj = {"one": [{"0":"3", "1":"5"} ],"two": [{"0":"4", "1":"6"}]}
实现方案
方案1:使用Array.prototype.reduce
const array1 = ['one', 'two', 'one', 'two']; const array2 = ['3', '4', '5', '6']; const arrayObj = array1.reduce((result, key, index) => { // 若当前键未初始化,创建包含空对象的数组 if (!result[key]) { result[key] = [{}]; } // 获取目标对象,以当前对象的键数量作为新索引存入值 const target = result[key][0]; target[Object.keys(target).length] = array2[index]; return result; }, {}); console.log(arrayObj);
方案2:使用普通for循环
const array1 = ['one', 'two', 'one', 'two']; const array2 = ['3', '4', '5', '6']; const arrayObj = {}; for (let i = 0; i < array1.length; i++) { const key = array1[i]; const value = array2[i]; if (!arrayObj[key]) { arrayObj[key] = [{}]; } const targetObj = arrayObj[key][0]; targetObj[Object.keys(targetObj).length] = value; } console.log(arrayObj);
说明
两种方案逻辑一致:
- 遍历数组时,检查当前键是否已存在于结果对象中,不存在则初始化一个包含空对象的数组
- 每次将
array2对应的值,以目标对象当前的键数量作为索引,存入对象中
内容的提问来源于stack exchange,提问作者Red Devil
相关产品推荐
相关产品推荐

