Заполните поле массива другими элементами массива - PullRequest
0 голосов
/ 14 ноября 2018
tradeArray = ['ITD', 'TND', 'TRD']
trade = []

this.tradeArray.map(val => this.trade.push({
      "value": val,
      "checked": false,
}))

У меня есть этот фрагмент, и я хочу добавить еще одно поле в массив trade, counter.

Например, если у меня есть count = [3, 5, 2], я хочу получить:

0: {value: "ITD", checked: false, counter: 3}
1: {value: "TND", checked: false, counter: 5}
2: {value: "TRD", checked: false, counter: 2}

Надеюсь, на этом примере вы поймете, что я хочу получить.Я пробовал что-то вроде этого:

count = [3, 5, 2]
this.tradeArray.map(val => this.trade.push({
  "value": val,
  "checked": false,
  "counter": this.count.map(val => val)
}))

, но это даст мне

0: {value: "ITD", checked: false, counter: [3, 5, 2]}
1: {value: "TND", checked: false, counter: [3, 5, 2]}
2: {value: "TRD", checked: false, counter: [3, 5, 2]}

Как я могу изменить, чтобы получить то, что я хочу?Спасибо за ваше время!

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Вы хотите сопоставить индекс tradeArray с тем же индексом в массиве count, чтобы получить соответствующее значение из count

const tradeArray = ['ITD', 'TND', 'TRD'],
  count = [3, 5, 2];
  
const res = tradeArray.map((v,i)=> ({value:v, checked:false, count:count[i]}));

console.log(res)
0 голосов
/ 14 ноября 2018

Прежде всего, не используйте map только для перебора коллекций. Вместо этого используйте его для того, для чего он предназначен: он проецирует функцию на каждый элемент в коллекции и создает новую коллекцию (в вашем случае Array) из возвращаемых значений функции. Если вы просто хотите повторить, используйте forEach.

Существует несколько возможных решений, но в основном вам нужна какая-то связь между «сделкой» в tradeArray и значениями внутри вашего счета. Для этого вы можете использовать позиции индекса:

var countITD = 3, countTND = 5, countTRD = 2;

var tradeArray = ['ITD', 'TND', 'TRD']
var counts = [countITD, countTND, countTRD]

var trade = tradeArray.map((name, index) => {
  return {value: name, checked: false, counter: counts[index]};
});
// -> [{value: 'ITD', checked: false, counter: 3}, ..., {value: 'TRD', checked: false, counter: 2}]
0 голосов
/ 14 ноября 2018

Если вы уверены, что массив count находится в том же порядке, что и tradeArray, вы можете использовать индекс .map, обеспечивающий

count = [3, 5, 2]
this.trade = this.tradeArray.map((val, index) => {
  "value": val,
  "checked": false,
  "counter": count[index]
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...