混合2个数组的内容

时间:2016-03-10 20:35:52

标签: javascript arrays

我有2个阵列:

var arr1 = [1, 1, 2, 3, 4, 4];
var arr2 = [];

arr1定义了一些组,组成员由位置定义。因此,小组成员01属于小组1
会员2属于群组2
会员3属于群组3
小组成员45属于小组4

我想将包含其成员的组加载到另一个数组中,以便我看起来像:

arr2 = [[0,1], [2], [3], [4,5]];

因此,小组1有成员01等等......

做的时候:

for(i=0; i<arr1.length; i++){
    arr2[arr1[i]] = i;
}

我明白了:

arr2 = [1: 1, 2: 2, 3: 3, 4: 5];

3 个答案:

答案 0 :(得分:2)

您几乎已经做对了,但您需要为arr2中的每个索引创建一个数组,然后将i附加到其中:

for(i=0; i<arr1.length; i++){
    arr2[arr1[i]] = arr2[arr1[i]] || [];  // create array here if none exists yet
    arr2[arr1[i]].push(i)                 // add i to array
}

请注意,这会与您所需的解决方案产生一个较大的差异(第一个组将位于索引1,而不是解决方案中的索引0),因此您可以转移arr2的标记是一个:

for(i=0; i<arr1.length; i++){
    arr2[arr1[i]-1] = arr2[arr1[i]-1] || [];
    arr2[arr1[i]-1].push(i)
}

请注意,如果arr2结果中存在间隙,则表示尚未指定所需行为。在这种情况下,索引在输出数组中保持未设置状态。

答案 1 :(得分:1)

您需要为每个组创建新数组,然后将值推送到该组。请参阅下面的代码中的我的评论:

var arr1 = [1, 1, 2, 3, 4, 4];
var arr2 = [];

for(i=0; i<arr1.length; i++) {
    // array indexes begins from 0, therefore arr2[arr1[i] - 1]
    if (!arr2[arr1[i] - 1]) { // if array for this index does not exist
        // then initialize new empty array
        arr2[arr1[i] - 1] = [];
    }
    arr2[arr1[i] - 1].push(i); // push correct value to the array
}

答案 2 :(得分:1)

var i;  
var arr2 = [];
for(i=0; i<arr1.length; i++){
  arr2[arr1[i]-1] = arr2[arr1[i]-1] || [];
  arr2[arr1[i]-1].push(i);
}