2015-11-15 4 views
-1

У меня есть два массива продуктов, называемых корзинами и запасами. Предположим, что существует 5 продуктов a-e.альтернатива для (var x in array)

Stock может выглядеть

stock[a] = 5, stock[b] = 5... 

и т.д. и т.п.

и телега может выглядеть

cart[a] = 2, cart[b] = 0... 

Я пытаюсь сделать что-то вроде

for (var product in cart){ if(cart[product] > 0){ cart[product] = stock[product] }

Но товар [product] всегда возвращает 0. Как я могу сделать так, чтобы я мог использовать один и тот же переменный продукт для доступа к продуктам как на складе, так и на тележку?

Я пытался что-то вроде

for (var product in cart && var product in stock) 

, но он не работает.

Есть ли другая альтернатива?

+0

«Но запас [продукт] всегда возвращает 0» - как ты определяя это? – Ryan

+1

Можете ли вы разместить больше своего кода? Вы уже можете использовать 'product' в качестве ключа как в' stock', так и 'cart', поэтому у вас должна быть другая проблема. Вы пробовали 'console.log' на' складе' и 'cart', чтобы увидеть, содержат ли они то, что, по вашему мнению, они делают? – Macmee

+0

http://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-such-a-bad-idea –

ответ

0

Это неясно, является ли или не вы итерация массива или объекта, но так как ваш вопрос говорит массив, я буду считать, как cart и stock массивы и a и b являются числами.

Как упоминал Chris L, вы, вероятно, не должны использовать цикл for..in для массивов, поэтому я бы рекомендовал обычный цикл for.

for (var i = 0; i < cart.length; i++) { 
    if (cart[i] > 0) { 
    cart[i] = stock[i]; 
    } 
} 

Если цель IE9 +, A forEach немного чище, на мой взгляд.

cart.forEach(function (item, index) { 
    if (item > 0) { 
    cart[index] = stock[index]; 
    } 
} 

Side Примечание: этот код выглядит он переназначения cart[i], если это больше, чем 0, который кажется очень странным для меня ...