Итерация по ключам объектов в Javascript

Имея такой объект:

req.body = {
    currency : "USD",
    item_name_1: "something",
    item_price_1: "something else",
    item_name_2: "something",
    item_price_2: "something else",
    item_name_3: "something",
    item_price_3: "something else",
    address: "some address"   
    itemCount: 3     
}

Каков наилучший способ получить только пары ключ / значение только имен элементов??, я бы попробовал что-то вроде этого, но, конечно, это не работает:

var cart= "";
for (var i=1; i<= req.body.itemCount;i++){
    cart += req.body.item_name_+i+
        " "+req.body.item_price_+i;       
}

Заранее спасибо!

3 ответа

Решение

Если вы хотите получить значение из объекта на основе строкового литерала или строки, вам нужно использовать [] обозначение, где значение между [] это строка Вы можете построить строку из строковых литералов и переменных через + оператор. Измените конкатенацию строк следующим образом:

cart += req.body["item_name_" + i] 
        + " " 
        + req.body["item_price_" + i];    

Вместо

req.body.item_name_+i

Это будет работать:

req.body["item_name_" + i]

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

req.body = {
    currency : "USD",
    items: [
        { name: "something", price: "something else" },
        { name: "something", price: "something else" },
        { name: "something", price: "something else" }
    ],
    address: "some address"   
}

Не проверял это, поэтому, возможно, придется возиться с этим, но я верю, что это будет так:

req.body["item_name_" + i]

а также

req.body["item_price_" + i]
Другие вопросы по тегам