使用javascript根据索引合并多个数组

时间:2017-04-02 16:40:44

标签: javascript jquery

我需要将两个数组合并为一个数组。我有代码,但它没有按预期工作 - 它是一个接一个地合并它们,但我需要互锁这些值。

<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>

7 个答案:

答案 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#reduceArray#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()仿函数,这对于您正在尝试的内容非常方便。让我们发明它;

&#13;
&#13;
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;
&#13;
&#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

transformation matrix

答案 4 :(得分:0)

您可以结合使用reduceconcatsource):

&#13;
&#13;
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;
&#13;
&#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);