我有 2 个数组:
var arr1 = [1, 1, 2, 3, 4, 4];
var arr2 = [];
arr1
定义了一些组,组成员按位置定义。所以组成员0
和1
属于组1
,
成员 2
属于组 2
,
成员 3
属于组 3
,
组成员 4
和 5
属于组 4
。
我想将组及其成员加载到另一个数组中,这样我看起来像:
arr2 = [[0,1], [2], [3], [4,5]];
所以 1
组有成员 0
和 1
等等...
做的时候:
for(i=0; i<arr1.length; i++){
arr2[arr1[i]] = i;
}
我得到:
arr2 = [1: 1, 2: 2, 3: 3, 4: 5];
最佳答案
你几乎做对了,但你需要为 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
结果中存在间隙,您还没有指定所需的行为。在这种情况下,索引在输出数组中保持未设置状态。
关于javascript - 混合 2 个数组的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35926731/