Какой лучший способ изменить массив значений объекта другим массивом в JavaScript - PullRequest
0 голосов
/ 12 июня 2019

У меня есть

var a = ["4", "2"],
b = [{"item": "1"}, {"item": "4"}, {"item": "2"}, {"item": "3"}];

Теперь мне нужно найти значение каждого a с помощью значения b, если, если я нашел соответствующее значение, необходимо создать

c=[{"item": false}, {"item": true}, {"item": true}, {"item": false}]

У меня есть jsfiddle с указанным выше пример здесь, но порядок массива изменен.результат должен быть таким же, как и выше массива "c", а также должен уменьшить количество методов фильтра и карты.

Ответы [ 2 ]

2 голосов
/ 12 июня 2019
let a = ["4", "2"];
let b = [{"item": "1"}, {"item": "4"}, {"item": "2"}, {"item": "3"}];
const trueValues = new Set(a);
let c = b.map(obj => ({"item": trueValues.has(obj["item"])}));

Это приводит к:

[{"item": false}, {"item": true}, {"item": true}, {"item": false}]

IE11 не будет поддерживать new Set(item1), вам потребуется:

const trueValues = new Set()
a.forEach(item => trueValues.add(item))

Ваш код приводит к

[{"item": true}, {"item": true}, {"item": false}, {"item": false}]

потому что вы берете все истины, а затем добавляете все ложные значения:

[...newItem, ...addOtherItems]

Если вы хотите отобразить массив в другой массив, вы должны просто использовать карту как

Для IE9 вы можете использовать что-то вроде этого:

b.map(b_i => ({item: a.some(a_i => a_i === b_i.item)}));
0 голосов
/ 12 июня 2019

Очень простой код для этого:

const a = ["4", "2"]
const b = [{"item": "1"}, {"item": "4"}, {"item": "2"}, {"item": "3"}]

console .log (
  b .map ( ({item}) => ({ item: a . includes (item) }) )
)

Если у вас много данных, это может не сработать, и вы можете посмотреть версию, используя вместо нее Set.Но я бы беспокоился, только если тестирование показало проблему с производительностью, поскольку этот код прост.

...