用另一个数组项填充数组字段

时间:2018-11-14 15:23:24

标签: javascript angular

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 :(得分:3)

首先,不要仅使用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}]

答案 1 :(得分:2)

您想将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)

答案 2 :(得分:0)

如果您确定count数组与tradeArray的顺序相同,则可以使用.map提供的索引

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