TypeScript 使用 push() 将对象添加到数组中

typescript adding object to an array using push()

提问人:hansvdzz 提问时间:9/13/2023 最后编辑:JensVhansvdzz 更新时间:9/14/2023 访问量:97

问:

我的数据元素包含:

{"records":[{"id":2463534,"token":"135","name":"MNC Rental","number":"0"},{"id":2463535,"token":"132","name":"ZNC Rental","number":"0"}]}

这是我的代码:

          var editableArray = [];
          var object = { i: 0, id: 0, number: "" };
          for(let i = 0 ; i < data.records.length ; i++) {
            object.i = i;
            object.id = data.records[i].id;
            object.number = data.records[i].number;
            console.log("object: " + JSON.stringify(object));
            editableArray.push(JSON.stringify(object));
          }
          console.log("array: " + JSON.stringify(editableArray));

输出:

object: {"i":0,"id":2463534,"number":"0"}
object: {"i":1,"id":2463535,"number":"0"}
array: ["{\"i\":0,\"id\":2463534,\"number\":\"0\"}","{\"i\":1,\"id\":2463535,\"number\":\"0\"}"]

所以在数组中有很多反斜杠,我不知道为什么。有人有避免这些反斜杠的想法吗?

如果我在 push 命令中删除 JSON.stringify,那么它只添加最后一个对象 2 次,结果如下:

array: [{"i":1,"id":2463535,"number":"0"},{"i":1,"id":2463535,"number":"0"}]
JavaScript 数组 TypeScript 对象

评论

0赞 JensV 9/13/2023
这回答了你的问题吗?为什么我的变量副本被意外更改?
0赞 TotallyNewb 9/13/2023
JensV 的答案是正确的,但如果你对一些不那么冗长的东西感兴趣,你可以只使用一行字来做同样的事情:const editableArray = data.records.map((record, index) => ({i: index, id: record.id, number: record.number}));

答:

4赞 JensV 9/13/2023 #1

您总是将同一个对象推入数组,然后对其进行修改。您每次都需要创建一个新对象:

for(let i = 0 ; i < data.records.length ; i++) {
    // moved inside to create a new object instead of modifying the existing one
    var object = { i: 0, id: 0, number: "" };
    object.i = i;
    object.id = data.records[i].id;
    object.number = data.records[i].number;
    console.log("object: " + JSON.stringify(object));
    editableArray.push(object);
}
console.log("array:", editableArray);

评论

0赞 hansvdzz 9/13/2023
是的,这是正确的解决方案。感谢
0赞 SuccoDiMora 9/14/2023 #2

@Jensv答案是完全正确的,只想添加我的解决方案。

它基本上做同样的事情,只是不那么冗长。

const data = {"records":[{"id":2463534,"token":"135","name":"MNC Rental","number":"0"},{"id":2463535,"token":"132","name":"ZNC Rental","number":"0"}]}

const editableArray = data.records.map(({ id, number }, i) => ({ i, id, number: String(number) }));

console.log("array: " + JSON.stringify(editableArray));