我需要将两个数组合并为一个数组。我有代码,但它没有按预期工作 - 它是一个接一个地合并它们,但我需要互锁这些值。
<html>
<head>
<title></title>
<script src="https://code.jquery.com/jquery-3.1.1.js"></script>
</head>
<body>
<div id="result"></div>
<script type="text/javascript">
var array1 = [1, 2, 3, 4];
var array2 = ["a", "b", "c", "d"];
var newArray = $.merge(array1, array2);
$("#result").html(newArray);
//the result its 1234absd
//ineed result like 1a,2b,3c,4d
</script>
</body>
</html>
答案 0 :(得分:8)
您可以在普通javascript中使用Array#map
。
var array1 = [1, 2, 3, 4];
var array2 = ["a", "b", "c", "d"];
var newArray = array1.map((e, i) => e + array2[i]);
console.log(newArray);
如果在array1上使用map,则第一个参数是循环中array1的当前值,第二个参数是array中该元素的索引。因此,您可以使用索引将array1中的当前元素与具有相同索引的其他数组中的元素进行匹配。
var array1 = [1, 2, 3, 4];
var array2 = ["a", "b", "c", "d"];
var array3 = ["f", "d", "s", "a"];
var newArray = array1.map(function(value, index) {
return value + array2[index] + array3[index];
});
console.log(newArray);
答案 1 :(得分:5)
您可以使用Array#reduce
和Array#map
来获取长度相同的任意数组。
var a1 = [1, 2, 3, 4],
a2 = ["a", "b", "c", "d"],
a3 = [9, 8, 7, 6],
a4 = ["z", "y", "x", "w"],
result = [a1, a2, a3, a4].reduce((a, b) => a.map((v, i) => v + b[i]));
console.log(result);
ES5
var a1 = [1, 2, 3, 4],
a2 = ["a", "b", "c", "d"],
a3 = [9, 8, 7, 6],
a4 = ["z", "y", "x", "w"],
result = [a1, a2, a3, a4].reduce(function (a, b) {
return a.map(function (v, i) {
return v + b[i];
});
});
console.log(result);
答案 2 :(得分:1)
实际上,JavaScript缺少.zip()
仿函数,这对于您正在尝试的内容非常方便。让我们发明它;
Array.prototype.zip = function(a){
return this.map((e,i) => typeof e === "object" || typeof a[i] === "object" ? [e,a[i]] : e+a[i]);
};
var arrays = [[1, 2, 3, 4],
["a", "b", "c", "d"],
[9, 8, 7, 6],
["z", "y", "x", "w"],
[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
],
result = arrays.reduce((p,c) => p.zip(c));
console.log(result);
&#13;
答案 3 :(得分:1)
仅需一点变化,便可以将索引按数组倍数合并,以创建值的关联数组。
const a = [1, 2, 3, 4],
b = [34, 54, 54, 43]
console.log(
a.map((e,i) => [e,b[i]])
)
然后,从给定值中搜索最接近的匹配项。
在此示例中,为3.7
搜索最佳关联值:
const a = [1, 2, 3, 4],
b = [34, 54, 54, 43],
c = a.map((e,i) => [e,b[i]]),
search = 3.7,
temp = [];
c.forEach(function(e){
temp.push(e[0])
})
const seek = temp.reduce((m, n) => (Math.abs(n-search) < Math.abs(m-search) ? n : m))
const index = c.findIndex((s) => s.indexOf(seek) !== -1)
console.log(c[index][1])
很明显,这是对象的行为方式,但是对我来说在许多特殊情况下非常有用。
例如,相同的 index 条目不会合并,但会将它们的关联值保存在新条目中,我们可以从 index 进行数学运算,然后创建{{ 3}}。我们可以使用任何列作为索引,并且可以双向搜索。
在计算机科学中,是关联数组,映射,符号表或 字典是一种抽象数据类型,由(键, 值)对,这样每个可能的键最多会在 集合。
与此数据类型相关的操作允许:
the addition of a pair to the collection the removal of a pair from the collection the modification of an existing pair the lookup of a value associated with a particular key
答案 4 :(得分:0)
var array1 = [1, 2, 3, 4];
var array2 = ["a", "b", "c", "d"];
var newArray = array1.reduce(function(prev, curr) {
return prev.concat(curr, array2[prev.length / 2]);
}, []);
$("#result").html(newArray);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result"></div>
&#13;
答案 5 :(得分:0)
如果有人需要以上述方式合并任意数量的数组(固定长度),以下功能将非常有用
console.clear();
var array1 = ["a1", "b1", "c1", "d1"];
var array2 = ["a2", "b2", "c2", "d2"];
var array3 = ["a3", "b3", "c3", "d3"];
var array4 = ["a4", "b4", "c4", "d4"];
function mergeElementsAtIndex(one_or_more_arrays){
const total_arr = arguments.length;
newArray = arguments[0].map((v, k) => {
var temp_val = v;
for(var i=1; i < total_arr; i++){
temp_val += arguments[i][k];
}
return temp_val;
});
return newArray;
}
merged_array = mergeElementsAtIndex(array1, array2, array3, array4);
console.log(merged_array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 6 :(得分:0)
var array1 = [1, 2, 3, 4];
var array2 = ["a", "b", "c", "d"];
var array3 = ["f", "d", "s", "a"];
var newArray = array1.map(function(value, index) {
return value + array2[index] + array3[index];
});
console.log(newArray);