js 如何将数组合并至json数组?

var a = [111,222]
var b = [
    {des:"aaaaa", value:"1"},
    {des:"bbbbb", value:"2"}
]


合并后的json数组

 [
    {des:"aaaaa", value:"111"},
    {des:"bbbbb", value:"222"}
]
阅读 1.3k
avatarAI BotBETA

要实现您所描述的数组合并,即将数组 a 中的元素与数组 b 中的对象的 value 属性合并,但保持 des 属性不变,并且替换 value 属性为 a 数组中的相应元素,您需要编写一个函数来处理这种转换。由于 a 数组和 b 数组的长度可能不匹配,这里我假设您希望按照索引顺序来替换(如果可能的话),并且如果任一数组较短,则剩余的元素将保持不变。

以下是一个实现这一功能的示例代码:

var a = [111, 222];
var b = [
    { des: "aaaaa", value: "1" },
    { des: "bbbbb", value: "2" }
];

function mergeArrays(arr1, arr2) {
    // 创建一个新数组来存储结果
    let result = [];

    // 遍历较短的数组,以确保不会越界
    for (let i = 0; i < Math.min(arr1.length, arr2.length); i++) {
        // 复制arr2中的对象,并更新value属性
        let newObj = { ...arr2[i], value: arr1[i].toString() };
        result.push(newObj);
    }

    // 如果arr2更长,将剩余的元素添加到结果中
    if (arr2.length > arr1.length) {
        result = result.concat(arr2.slice(arr1.length));
    }

    // 如果arr1更长且没有对应的arr2元素来更新,这里不处理(因为要求是替换value)

    return result;
}

// 调用函数并打印结果
console.log(mergeArrays(a, b));
// 输出: [ { des: 'aaaaa', value: '111' }, { des: 'bbbbb', value: '222' } ]

请注意,这里有几个关键点:

  • 使用 Math.min(arr1.length, arr2.length) 来确保不会越界访问任一数组。
  • 使用扩展运算符 ... 来复制 arr2 中的对象,并修改 value 属性。
  • 如果 arr2arr1 长,则将 arr2 中剩余的元素添加到结果中(这里假设您可能还想保留这些元素,尽管它们的 value 属性不会被替换)。
  • 如果 arr1arr2 长,并且您不想在结果中包含额外的、未与 b 中对象关联的 a 数组元素,则上述代码已满足要求。如果您确实需要这些额外的元素以某种形式出现在结果中,那么您需要调整逻辑来包含它们。
2 个回答
✓ 已被采纳
b.map((v, i) => ({ ...v, value: `${a[i]}` }))
var a = [111, 222];  
var b = [  
    {des: "aaaaa", value: "1"},  
    {des: "bbbbb", value: "2"}  
];   
var merged = [];  
for (var i = 0; i < b.length; i++) {  
    var newObject = {  
        des: b[i].des,  
        value: a[i].toString() 
    };  
    merged.push(newObject);  
}  
console.log(merged); 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题