TypeScript-如何为数组中的每个对象添加键值对?

8e2ybdfx  于 2023-05-08  发布在  TypeScript
关注(0)|答案(5)|浏览(267)

我有一个日期数组和一个对象数组。我想将日期作为键值对{"Date": "10-12-18"}添加到对象数组中。

dates

["10-12-18", "10-13-18", 10-14-18"]

data

[
   {"name":"One", "age": "4"},
   {"name":"Two", "age": "5"},
   {"name":"Three", "age": "9"}
]

我想要...

[
    {"name":"One", "age": "4", "Date": "10-12-18"},
    ....

我如何在TypeScript中做到这一点?我习惯了普通的JavaScript,但无法正确使用它。
到目前为止我有:

for (let idx of data){
   data[idx].date = dates[idx] 
}

谢谢!

htrmnn0y

htrmnn0y1#

你的代码的问题是idx将是对象而不是索引,因为你使用的是for...of。使用一个简单的常规for,如:

for(let idx = 0; idx < data.length; idx++) {
    data[idx].date = dates[idx];
}

或者使用forEach循环其中一个数组,并使用它提供的索引从另一个数组中获取值:

data.forEach((obj, i) => obj.date = dates[i]);
qgzx9mmu

qgzx9mmu2#

const result = data.map(({ name, age }, index) => ({ name, age, date: dates[index] }));

将数组Map到结果。

zsbz8rwp

zsbz8rwp3#

就像这样:

let dates = ["10-12-18", "10-13-18", "10-14-18"];

    let objs = [{"name":"One",
     "age": "4"},

     {"name":"Two",
     "age": "5"},

    {"name":"Three",
     "age": "9"}
    ]

    const result = objs.map((item, index) => {
        item.Date = dates[index];
        return item;
    });

console.log(result);
o2g1uqev

o2g1uqev4#

在TS中,你可以像下面这样做。

var data = [{
    "name": "One",
    "age": "4"
  },

  {
    "name": "Two",
    "age": "5"
  },

  {
    "name": "Three",
    "age": "9"
  }
];

var dates = ["10-12-18", "10-13-18", "10-14-18"];

console.log(data.map((ob, i) => ({ ...ob,
  "Date": dates[i]
})));
rnmwe5a2

rnmwe5a25#

根据@Jonas Wilms的回答,我认为map operator是最好的解决方案。
你也可以使用spread operator来代替解构对象,像这样:

const data = [
   { 'name':'One', 'age': '4' },
   { 'name':'Two', 'age': '5' },
   { 'name':'Three', 'age': '9' }
];

const dates = ['10-12-18', '10-13-18', '10-14-18'];

const result = data.map((object, index) => ({ ...object, date: dates[index] }));

在长对象的情况下,它避免了重写对象的每个键。

相关问题