Замена массива на соответствующий ключ в объекте - PullRequest
1 голос
/ 10 июля 2020

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

Текущий код

        fetchInventory: async function () {
            await Object.entries(this.$store.state.inventory).forEach(([k, v]) => {
                for (let i = 0; i < parseInt(v); i++) this.inventory.push(parseInt(k))
            })

            const items = JSON.parse(localStorage.getItem('priceCache'));
            const filteredItems = await items.list.filter(i => this.inventory.includes(i[0]));

            this.inventory = await filteredItems;
        }

Вход var array = [1208, 1209, 1209]

Текущий выход

var output = [[1208, 'returned item'], [1209, 'returned item']]

Ожидаемый результат

var output = [[1208, 'returned item'], [1209, 'returned item'], [1209, 'returned item']]

Объект localStorage const items = JSON .parse (localStorage.getItem ('priceCache'));

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Похоже, вы хотите Array#map и Array#find.

this.inventory = this.inventory.map(v=>[v, items.list.find(x=>x[0]===v)[1]);
0 голосов
/ 10 июля 2020

Я думаю, вы не хотите, чтобы filter терял какое-либо значение в array (1209 здесь, например)

Итак, вам действительно нужно сначала map, а затем filter:

var items = [1208, 1209] 
// inventory
var array = [1208, 1209, 1209] 
// filtered inventory
var output = array.map(i => items.includes(i) ? [i, 'returned item'] : undefined)
  .filter(i => i !== undefined)

console.log(output)

/** output:
(3) [Array(2), Array(2), Array(2)]
0: (2) [1208, "returned item"]
1: (2) [1209, "returned item"]
2: (2) [1209, "returned item"]
**/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...