使用javascript合并数组的数组
我是javascript初学者,我正在尝试合并两个数组 我有两个这样的阵列:使用javascript合并数组的数组,javascript,arrays,Javascript,Arrays,我是javascript初学者,我正在尝试合并两个数组 我有两个这样的阵列: arr1[ { description : "this is a object", array : ["a","b"] } ] arr2[ { array : ["c","d"] } ] 我想得到一个这样的javascript对象 result = { description : "this is a object", array :
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"] }
这不是我想要的结果,因为它缺少值。我怎样才能以我想要的方式合并它们呢?也许您应该看看递归函数的这个实现 它应该具有与PHP数组_merge _recursive相同的行为 代码: 你混淆了数组和散列。“数组”中的冒号分隔符表示您正在尝试定义哈希。哈希必须用大括号
{}
而不是方括号[]
分隔
假设您试图定义并组合两个散列,下面介绍如何在没有任何泛型的情况下通过显式指定如何将每个输入散列中的每个键/值对合并到组合散列中来实现:
var obj1={
描述:“这是一个对象”,
数组:[“a”,“b”]
};
变量obj2={
数组:[“c”,“d”]
};
var res={
description:obj1.description,
数组:obj1.array.concat(obj2.array)
};
警报(res.description);//“这是一个对象”
警报(res.array);//a、 b、c、d
谢谢您的更正。让我纠正一下。它基本上是数组中的一个对象。我正在处理类似于arr1[{description:“这是一个对象”,数组:[“a”,“b”]}]而且数组:[“a”,“b”]是动态添加的,所以当我尝试将其称为arr1[0]时,数组会给我错误。请help@qualitytest请参阅我的编辑。关于您对数组
散列项的动态性的评论,这是一个单独的问题。当上述代码在页面上下文中运行时,数组
条目在散列中存在或不存在;这取决于页面的较大设计。如果条目存在,则arr1[0]。数组将不会失败。如果不存在,则我的第一个解决方案将失败,因为它显式引用了arr1[0]。array
,但我的第二个解决方案不会失败,因为它只适用于输入哈希中的现有项。但我刚刚注意到,它在嵌套数组中显示了重复的元素:(请帮助该函数不删除重复项。如果您想这样做,您必须添加代码。我不知道有任何简单的内置方法可以在JavaScript中从数组中删除重复项;有关一些选项,请参阅。我使用了该函数,它帮了忙。再次感谢!:)尽管我喜欢这个想法,链接的代码将覆盖arr1的成员。原来的php函数不会这样做。相反,它将只返回合并的数组。此移植函数根本不需要return语句,因为运行此函数后,返回值与第一个参数的内容相同。此外,还需要array_merge。不仅如此。。array\u merge\u recursive和array\u merge必须是同一对象的成员。我想你需要做这样的事情:var phpjs={};prototype={array\u merge:array\u merge,array\u merge\u recursive:array\u merge\u recursive}代码>它会导致如下函数调用:var mergedArray=phpjs.array\u merge\u recursive(arr1,arr2)代码>
function array_merge_recursive(arr1, arr2) {
// discuss at: http://phpjs.org/functions/array_merge_recursive/
// original by: Subhasis Deb
// input by: Brett Zamir (http://brett-zamir.me)
// bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// depends on: array_merge
// example 1: arr1 = {'color': {'favourite': 'read'}, 0: 5}
// example 1: arr2 = {0: 10, 'color': {'favorite': 'green', 0: 'blue'}}
// example 1: array_merge_recursive(arr1, arr2)
// returns 1: {'color': {'favorite': {0: 'red', 1: 'green'}, 0: 'blue'}, 1: 5, 1: 10}
var idx = '';
if (arr1 && Object.prototype.toString.call(arr1) === '[object Array]' &&
arr2 && Object.prototype.toString.call(arr2) === '[object Array]') {
for (idx in arr2) {
arr1.push(arr2[idx]);
}
} else if ((arr1 && (arr1 instanceof Object)) && (arr2 && (arr2 instanceof Object))) {
for (idx in arr2) {
if (idx in arr1) {
if (typeof arr1[idx] === 'object' && typeof arr2 === 'object') {
arr1[idx] = this.array_merge(arr1[idx], arr2[idx]);
} else {
arr1[idx] = arr2[idx];
}
} else {
arr1[idx] = arr2[idx];
}
}
}
return arr1;
}