2016-03-10 2 views
1

У меня 2 массива:Смешайте содержимое 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]; 

ответ

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 результата. В этом случае индекс остается неустановленным в выходном массиве.

+0

Что означает '||' в этом контексте? – user1170330

+0

@ user1170330 [Что делает "var FOO = FOO || {} "Означает в Javascript?] (Http://stackoverflow.com/questions/6439579/what-does-var-foo-foo-mean-in-javascript) - если левая сторона« ложна »(' undefined ',' null', пустая строка, '0'), тогда выражение оценивается в правой части - в этом случае - новый пустой массив. В противном случае он оценивается с левой стороны. Таким образом, это означает «установить' arr2 [arr1 [i]] 'самому себе, если у него нет значения, и в этом случае установите его в массив" – apsillers

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 
} 
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); 
} 
Смежные вопросы