【问题标题】:Why is array.push overriding the entire array? [duplicate]为什么 array.push 会覆盖整个数组? [复制]
【发布时间】:2020-04-04 21:49:52
【问题描述】:

我向 api 发送一个 get 请求,它以

的形式返回数据
{
"message": "<SUCCESS>",
"result": [
{
  "i": 1,
},
{
  "i": 2,
},    
{
  "i": 3,
}  ]
}

然后在 javascript (angular component.ts) 中我想创建一个数组 ob 对象,但是在将对象推送到数组中之后,每个数组都包含最后一个对象的数据:

.subscribe(
          data => {
            type MyArrayType = Array<UserOpinion>;
            let array: MyArrayType = [];
            let cont: CustomInterface = {
              i: ''
            }

            data.result.forEach(function(entry) {
            cont.i = entry["i"];

            array.push(cont);
            console.log(cont);
            //right value is shown

            })
            //console.log(array)
            //array contains the connect number of objects but the objects are set on the             same value: "i" = 3

任何想法为什么会发生这种情况?谢谢

【问题讨论】:

  • 因为只有1个cont。您需要在forEach 中创建一个新对象。
  • 谢谢零!我应该使用哪种语法?
  • 只需将您的 let cont 声明移动到 forEach 内部而不是它之前
  • 非常感谢!这有效
  • "然后在 javascript (angular component.ts) 中我想创建一个数组 ob 对象" 但是你已经有一个对象数组:let array: UserOpinion[] = data.result;

标签: javascript arrays angular interface request


【解决方案1】:

应该这样做:

.subscribe(
    data => {
        type MyArrayType = Array<UserOpinion>;
        let array: MyArrayType = [];

        data.result.forEach(function(entry) {
            array.push(entry);
        });
    }
);

你不需要cont只是为了将当前对象复制到另一个,你可以直接使用当前循环元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    相关资源
    最近更新 更多