不使用concat合并JavaScript数组:为数组对象添加键值对
解决方案:将数组元素作为键添加到另一数组的对象中
嘿,我明白你的需求了——不是用concat做简单的数组拼接,而是要把array1里的每个字符串作为新的键值对,添加到array2的每个对应对象里对吧?这用JavaScript的数组和对象操作就能轻松实现,我给你分享几个实用的方案:
方案1:使用map+reduce(纯函数式,不修改原数组)
这种方式会返回一个全新的数组,不会改动原始的array2,非常适合需要保留原数据的场景:
// 定义你的两个数组 const array1 = [ "Basket Abandonment", "Downloads", "App Version" ]; const array2 = [ { bottom: { comp : "", details: "3.1.39 22nd Jul 2015", status : "", title : "Previous Version", value : "8.7%" }, top: { details: "3.1.40 25th August 2015", status: "", title: "Current Version", value: "91.3%" } } // 这里可以添加更多对象 ]; // 执行合并操作 const mergedArray = array2.map(obj => { // 把array1的元素转换成键值对对象 const newKeyPairs = array1.reduce((acc, key) => { acc[key] = ""; // 这里可以替换成你需要的默认值,比如null或者特定内容 return acc; }, {}); // 合并原对象和新键值对 return { ...obj, ...newKeyPairs }; }); console.log(mergedArray);
方案2:使用map+forEach(更直观的写法)
如果你觉得reduce有点绕,用forEach遍历添加键值对会更易懂:
const mergedArray = array2.map(obj => { // 复制原对象,避免修改原始数据 const newObj = { ...obj }; // 遍历array1,给新对象添加每个键 array1.forEach(key => { newObj[key] = ""; // 同样可以自定义值 }); return newObj; });
调整说明
如果你的需求是把这些键添加到array2对象里的bottom或top子对象中,只需要稍微修改代码即可:
const mergedArray = array2.map(obj => { const newObj = { ...obj }; // 给bottom子对象添加键 array1.forEach(key => { newObj.bottom[key] = ""; }); // 给top子对象添加键(如果需要的话) array1.forEach(key => { newObj.top[key] = ""; }); return newObj; });
内容的提问来源于stack exchange,提问作者Mark Hayden
相关产品推荐
相关产品推荐

