javascript - 使用javascript合并数组数组

标签 javascript arrays

我是一个 javascript 初学者,我正在尝试合并两个数组。

我有两个这样的数组:

 arr1[
{
        description : "this is a object",
        array       : ["a","b"]
 }
    ]

 arr2[
{
       array : ["c","d"]
} 
   ]

我想得到一个像这样的 javascript 对象

result = { description : "this is a object", array : ["a","b","c","d"]}

元素的顺序对我来说并不重要。所以我尝试了以下方法。

result = $.extend(true, {},arr1,arr2)[0];

但这会返回以下输出

result = { description : "this is a object", array : ["c","d"] }

这不是我想要的结果,因为它缺少值。我怎样才能按照我想要的方式合并它们?

最佳答案

您混淆了数组和散列。 “数组”中存在冒号分隔符表明您正在尝试定义哈希。哈希值必须用大括号 {} 而不是方括号 [] 分隔。

假设您正在尝试定义和组合两个散列,下面是如何在没有任何通用性的情况下完成它,IOW 通过明确指定如何将每个输入散列中的每个键/值对合并到组合散列中:

var obj1 = {
    description : "this is an object",
    array       : ["a","b"]
};

var obj2 = {
    array : ["c","d"]
};

var res = {
    description : obj1.description,
    array       : obj1.array.concat(obj2.array)
};

alert(res.description); // "this is an object"
alert(res.array); // a,b,c,d


现在,对于更通用的解决方案,您可以编写“标准”逻辑来处理各种数据类型及其在输入哈希值对中的冲突:

var obj1 = {
    description : "this is an object",
    array       : ["a","b"]
};

var obj2 = {
    array : ["c","d"]
};

function combine(obj1,obj2) {
    var res = {};
    for (var k1 in obj1) {
        if (!obj1.hasOwnProperty(k1)) continue;
        if (obj2.hasOwnProperty(k1)) { // collision
            if (typeof(obj1[k1]) !== typeof(obj2[k1])) throw "type mismatch under key \""+k1+"\".";
            if (Array.isArray(obj1[k1])) {
                res[k1] = obj1[k1].concat(obj2[k1]);
            } else if (typeof(obj1[k1]) === 'string' || obj1[k1] instanceof String) {
                res[k1] = obj1[k1]+obj2[k1];
            } else if (typeof(obj1[k1]) === 'object') {
                res[k1] = combine(obj1[k1],obj2[k1]);
            } else {
                throw "unsupported collision type "+typeof(obj1[k1])+" under key \""+k1+"\".";
            }
        } else {
            res[k1] = obj1[k1];
        }
    }
    for (var k2 in obj2) {
        if (!obj2.hasOwnProperty(k2)) continue;
        if (obj1.hasOwnProperty(k1)) continue; // already handled it above
        res[k2] = obj2[k2];
    }
    return res;
}

var res = combine(obj1,obj2);

alert(res.description); // "this is an object"
alert(res.array); // a,b,c,d


经过您的修改,我的解决方案仍然适用;您只需首先索引数组以提取包含的对象。所以这里是修改后的实现:

解决方案一:

var res = {
    description : arr1[0].description,
    array       : arr1[0].array.concat(arr2[0].array)
};

解决方案 2:

var res = combine(arr1[0],arr2[0]);

关于javascript - 使用javascript合并数组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31850365/

相关文章:

php - 创建广告多维数组并使用 foreach 循环显示它

javascript - 向下滚动时隐藏 div

字符串的 C char 到数组

c++ - 提出了一种对大型对象数组进行排序的算法;谁能告诉我这个算法叫什么? (在谷歌上找不到)

javascript - 手动推进轨道 slider

Java用给定字符串字符(?)的N个元素填充数组

arrays - 在 Debian 8.4 中创建数组变量时出错

javascript - 在 Dash.js 中使用 JavaScript 前进到下一个视频

javascript - 通过元素属性获取地址

javascript - 隐藏字符串中的字符