2015-03-26 4 views
-1

У меня есть два массива с различными типами сложных объектов. Если существует определенное соответствие значений между объектами каждого массива, тогда мне нужно взять несколько значений из одного из подходящих объектов и сохранить его. Если несколько пар значений ключа из соответствующего объекта будут сохранены, его необходимо удалить из его массива, чтобы он не сохранялся более одного раза.Обновление массива с условием для цикла - Javascript

Следующее - мое самое лучшее усилие (пока что покажу пример того, что я пытаюсь сделать).

Я хочу обновить свой пустой массив на основе следующего кода. Это простой пример, иллюстрирующий гораздо более сложную проблему, и я думаю, что это, вероятно, лучший способ, чем разрезать и наклеить десятки строк кода. Проблема связана со сбором значений в массиве emptyArray и filtering array2 во время каждой передачи внешнего цикла. Предложения, ведущие с подчеркиванием, не помогают.

var array = [1, 2, 3, 4, 1, 2, 3, 4]; 
var array2 = [2, 4, 6, 8, 10]; 
var emptyArray = []; 
for (i = 0; i < array.length; i++){ 
    var something = array[i]; 
    var array2 = _.without(array2, emptyArray); 
    for (a = 0; a < array2.length; a++){ 
     var value = array2[a]; 
      if(something === value){ 
       emptyArray.push(value); 
       break; 
      } 
    } 
} 

Я хочу, чтобы обновить значения в массив2 на основании заявления, если так, что эти значения не повторяются в вложенном цикле. Вместо этого my emptyArray остается пустым, а не добавляет значения из массива2, поскольку элементы массива2 равны элементам массива.

Чтобы быть ясным, прямо сейчас emptyArray остается пустым и никогда не фильтрует array2. Я хочу, чтобы пустой массив собирал значение 2 в начале второй итерации внешнего цикла, тогда я хотел бы увидеть значение пустого массива 4 в начале 4-й итерации внешнего цикла.

Я хотел бы отфильтровать каждое из этих значений из массива2, поскольку они становятся частью пустого массива, так что они не задают оператор if во время 6-й и 8-й итераций внешнего цикла. Я полагаю, что пустые атрибуты = [2, 4] и array2 = [6, 8, 10], когда петли закончены.

+1

Если вы собираетесь дать мне минус, не могли бы вы хотя бы сказать почему? – rashadb

+0

Возможно, если бы вы предоставили примеры ожидаемого вывода, которые могли бы помочь. Я не вижу, как этот код может работать, например, потому что в 'array' нет элементов для перебора. – Andy

+0

спасибо! Я обновлю его сейчас! – rashadb

ответ

2

функция _.without не принимает массив в качестве второго аргумента, он принимает отдельные элементы должны быть удалены. например, _.without(ar1,1,2,3) Если вам нужно передать массив, используйте _.difference(ar1, ar2)

0

Поскольку вы уже используете символ подчеркивания, это может быть намного проще.

emptyArray = _.intersection(array, array2) 
array2 = _.difference(array2, emptyArray) 
+0

Еще раз спасибо за то, что вернулись ко мне. Как я упоминал выше, код более сложный, поэтому на самом деле он не может быть проще, чем код, показанный выше. Это добавление значений к массиву, в то время как проблема с циклом становится более сложной, поскольку она меняет длину цикла по мере его итерации. – rashadb

Смежные вопросы