Преобразовать объект в сопоставленный массив? - PullRequest
0 голосов
/ 11 декабря 2018

Есть ли способ улучшить этот код для преобразования объекта в сопоставленный массив?

Я придумал это решение, есть ли лучший подход и более чистый?

let productItems =  {
    'Item1': { 
        quantity: 4, 
        name: 4,
        price: 123
    },
    'Item2': { 
        quantity: 1, 
        name: 3,
        price: 144
    },
    'Item3': { 
        quantity: 2, 
        name: 2,
        price: 343
    }
}

let items = [];

for (const item in productItems) {
    const formatItem = {
        "Qty": productItems[item].quantity,
        "Cost": productItems[item].price
    }

    items.push(formatItem);
}

Выход:

[ { Qty: 4, Cost: 123 },
  { Qty: 1, Cost: 144 },
  { Qty: 2, Cost: 343 } ]

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Object.values ​​будет работать нормально.если вы хотите получить доступ к ключам и значениям обоих, вы можете использовать Object.entries с картой

Object.entries({
'Item1': { 
    quantity: 4, 
    name: 4,
    price: 123
},
'Item2': { 
    quantity: 1, 
    name: 3,
    price: 144
},
'Item3': { 
    quantity: 2, 
    name: 2,
    price: 343
}}).map(([key, {quantity, price}]) => ({Qty: quantity, Cost: price}))
0 голосов
/ 11 декабря 2018

Вы можете использовать Object.values ​​()

Метод Object.values() возвращает массив значений собственного перечисляемого свойства данного объекта в том же порядке, что и предоставленныйс помощью цикла for...in (отличие состоит в том, что цикл for-in перечисляет свойства и в цепочке прототипов).

и Array.prototype.map () :

Метод map() создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.

let productItems =  {
    'Item1': { 
        quantity: 4, 
        name: 4,
        price: 123
    },
    'Item2': { 
        quantity: 1, 
        name: 3,
        price: 144
    },
    'Item3': { 
        quantity: 2, 
        name: 2,
        price: 343
    }
}

let items = Object.values(productItems).map(i => ({Qty: i.quantity, Cost: i.price}));
console.log(items);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...