2014-12-17 2 views
0

Мне нужна помощь, чтобы получить правильную работу. позвольте мне объяснить несколько частей, чтобы вы поняли проблему, прежде чем я покажу вам эту функцию.цикл через 2 массива javascript

обратите внимание: все данные передаются, не волнуйтесь ни о чем таком, что мой вопрос заключается в том, чтобы зациклиться на данных, которые я изложил ниже, и заставить его работать правильно. Когда эта функция попадает, все уже передается.

У меня есть 2 массива, в которых хранятся данные, в которых один называется Variants(), который всегда содержит 6 вариантов, все из которых имеют уникальный идентификатор, а другой - ProductRequests(). Варианты содержат ВСЕ мои варианты и ProductRequests содержит все выбранные варианты, это может варьироваться от 1 до 6, поэтому все зависит от того, что они выбрали, но они должны выбрать хотя бы один. Независимо от того, что они выбрали, всегда будет соответствовать по сравнению с идентификаторами Array Variants().

Эти идентификаторы, которые совпадают друг с другом, а также количества, то, что я хочу сделать, это петлевые варианты и запросы на продукт, если любой из идентификаторов соответствует, а затем, если они соответствуют количеству из ProductRequests, перепишите количество из Варианты этого идентификатора продукта. Я сделал вторую часть ниже, но ее нужно писать намного лучше.

Что я сделал, так это то, что я написал функцию (без каких-либо циклов), которая сравнивает идентификаторы, но то, что моя проблема иногда зависела от того, что пользователь выбирает в массивах, не будет соответствовать номерам массивов в качестве ProductRequests для пример ProductRequests может содержать только 1 элемент, но он соответствует только Variant() [5] идентификаторов, которые находятся в вариантах и ​​т. д. Таким образом, этот жесткий код просто не сработает. (ну, может быть, это было бы ужасно грязным код.)

function Compare(){ 
     var OldVariants = Variants(); 
     var RequestVariants = ProductRequests(); 
     var One = OldVariants[0].Id; 
     var Two = OldVariants[1].Id; 
     var Three = OldVariants[2].Id; 
     var Four = OldVariants[3].Id; 
     var Five = OldVariants[4].Id; 
     var Six = OldVariants[5].Id; 

     if (One == RequestVariants[0].Id) 
     {OldVariants[0].Quantity(RequestVariants[0].Quantity)} 
     if (Two == RequestVariants[1].Id) 
     {OldVariants[1].Quantity(RequestVariants[1].Quantity)} 
     if (Three == RequestVariants[2].Id) 
     {OldVariants[2].Quantity(RequestVariants[2].Quantity)} 
     if (Four == RequestVariants[3].Id) 
     {OldVariants[3].Quantity(RequestVariants[3].Quantity)} 
     if (Five == RequestVariants[4].Id) 
     {OldVariants[4].Quantity(RequestVariants[4].Quantity)} 
     if (Six == RequestVariants[5].Id) 
     {OldVariants[5].Quantity(RequestVariants[5].Quantity)} 
     } 

Эта функция работает, но как я уже сказал выше, если пользователь не выбирает ProductRequests в том порядке, идентификаторы не совпадают означая значения не получают бессрочные.

Любые советы или помощь были бы замечательными.

+1

что является 'функция Compare' намеревался сделать? Вы сказали, что сравнивают их, но не * как *, или какие результаты вы ожидаете, или ... –

+0

он сначала устанавливает идентификаторы массива вариантов в переменную. Затем он сравнивает этот id с ProductRequest(). Id .. теперь то, что я хочу сделать, - это цикл через 2 массива и поиск любых совпадающих идентификаторов в 2 массивах .. теперь, если есть совпадение, которое я хочу сделать a if и добавить ProductRequests(). Количество каждого совпадающего идентификатора в вариантах(). Количество –

+0

Хорошо, хорошо - это то, что мой ответ делает. :-) (Предполагая, что функция 'Quantity' в элементах« OldVariants' добавляет.) –

ответ

0

Если ваша цель состоит в том, чтобы обновить записи из OldVariants, которые имеют тот же Id как записи в RequestVariants, называя их методом Quantity с Quantity свойства запрашиваемых вариантов, то вам необходим либо петля петель:

function Compare(){ 
    var OldVariants = Variants(); 
    var RequestVariants = ProductRequests(); 

    RequestVariants.forEach(function(req) { 
     OldVariants.some(function(variant) { 
      if (variant.Id == req.Id) { 
       variant.Quantity(req.Quantity); 
       return true; // Stops the inner loop 
      } 
     }); 
    }); 
} 

... или вы хотите, чтобы построить временную Id->Variant карту, а затем использовать это:

function Compare(){ 
    var OldVariants = Variants(); 
    var RequestVariants = ProductRequests(); 
    var VariantMap = {}; 

    OldVariants.forEach(function(variant) { 
     VariantMap["x" + variant.Id] = variant; 
    }); 

    RequestVariants.forEach(function(req) { 
     var variant = VariantMap["x" + req.Id]; 
     if (variant) { 
      variant.Quantity(req.Quantity); 
     }); 
    }); 
} 
+0

В следующей функции это был вариант. Quantity (req.Quantity); я очистил все запросы, чтобы он больше не мог найти, но теперь я удалил эту часть благодаря большому большому ответу. –

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