2016-05-16 3 views
1

У меня есть массив объектов, которые выглядят примерно так:Вставка динамического значения в массив объектов, javascript

[ 
{Number: 5002000, Origin: 123456, Count: 128}, 
{Number: 5002300, Origin: 900231, Count: 52}, 
{Number: 5002022, Origin: 534323, Count: 269} 
] 

Теперь я пытаюсь умножить значение «Count» со значением из заданного пула цены.

Что выглядит примерно так:

[ 
{Prefix: 50023, Price: 20},  
{Prefix: 50020, Price: 10}, 
{Prefix: 5002, Price: 60}, 
] 

В настоящее время существует ужасающий цикл с if-утверждениями.

for (var key in sData) { 
    if (sData[key].Origin.startsWith('50023')) { 
    sData[key].sum = (sData[key].Count * 20); 
    } 
    else if (sData[key].Origin.startsWith('50020')) { 
    sData[key].sum = (sData[key].Count * 10); 
    } 
    // continues... 
} 

startsWith - это функция, которая просто проверяет, начинается ли значение с (значения).

Есть ли уже функция в JS для отображения двух массивов объектов? (У меня также возникают проблемы с логикой, так как значение «Префикс» в основном должно идти сверху вниз, чтобы не приземляться по умолчанию «5002» -prefix.)

+0

, но префикс '5002' охватывает остальные префиксы. Какой приоритет? – RomanPerekhrest

ответ

1

В этой ситуации вы должны использовать вложенные циклы , Также переключитесь на метод Array.forEach.

sData.forEach(function(item_, key) { 

      prices.forEach(function(item) { 

      if (sData[key].Origin.startsWith(item.Prefix)) { 
       sData[key].sum = (sData[key].Count * item.Price); 
      } 

      }); 

}) 
+0

Правильно, это было просто, позвольте мне попробовать! – HenrikM

+0

Как ваш манипулирующий элемент в массиве 'sData', [map] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) предпочтительнее, чем' forEach' – ste2425

+0

Работал отлично, спасибо! – HenrikM

1

Предполагая, что второй массив может быть преобразован в хэш:

var tiers = { 
    50023: {Prefix: 50023, Price: 20},  
    50020: {Prefix: 50020, Price: 10}, 
    5002: {Prefix: 5002, Price: 60}, 
} 

Вы можете сделать его выглядеть следующим образом:

for (var key in sData) { 
    var key = String(sData[key]) 
    var keyIndex = key.slice(5) 

    if (tiers.hasOwnProperty(keyIndex)) { 
     var price = tiers[keyIndex].Price 
     sData[key].sum = (sData[key].Count * price) 
    } else { 
     // Fallback solution 
    } 
} 

Двигаясь дальше, вы можете даже думать о какой-то рекурсивного решения для возврата.

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