Javascript foreach和for循环仅在执行array.push时总是循环一次 [英] Javascript foreach and for loop always loop once only when do array.push

查看:55
本文介绍了Javascript foreach和for循环仅在执行array.push时总是循环一次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

仅当执行array.push时,将console.log(odgovor)放到Javascript代码中一次,它显示一切正常

Javascript code loop once only when do array.push when put console.log(odgovor) it display everything good

getTacni() {
    this.storageService.getQuestions().then(items => {
      let odgovori: { id: number; answer: number }[] = [];
      let odgovor: { id: number; answer: number } = { id: null, answer: null };
      for (let i of items) {
        odgovor.id = i.id;
        odgovor.answer = i.tacan;
        console.log(odgovor);
      }
    });
  }

失败odgovori中的每个元素都是相同的

FAIL every element in odgovori is same

getTacni() {
    this.storageService.getQuestions().then(items => {
      let odgovori: { id: number; answer: number }[] = [];
      let odgovor: { id: number; answer: number } = { id: null, answer: null };
      for (let i of items) {
        odgovor.id = i.id;
        odgovor.answer = i.tacan;
        odgovori.push(odgovor);
      }
    });
  }

推荐答案

在这两个代码段中,您仅在内存中创建了一个对象,然后继续进行多次更改-在循环中创建每个对象:

In both snippets, you've only created one object in memory, which you proceed to mutate many times - create each object inside the loop instead:

getTacni() {
  this.storageService.getQuestions().then(items => {
    const odgovori: { id: number; answer: number }[] = [];
    for (let i of items) {
      const odgovor: { id: number; answer: number } = { id: i.id, answer: i.tacan };
      odgovori.push(odgovor);
    }
  });
}

您还可以考虑使用.map,这是一种简洁,实用且易读的方式,可将一个数组的每个元素转换为另一个:

You also might consider using .map, which is a concise, functional, and readable way to transform every element of one array into another:

getTacni() {
  this.storageService.getQuestions().then(items => {
    const odgovor = items.map(({ id, tacan }) => ({ id, answer: tacan }));
  });
}

这篇关于Javascript foreach和for循环仅在执行array.push时总是循环一次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆