我有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];
答案 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);
}