【问题标题】:For loop doesn't work in array (Javascript, Angular 2)For 循环在数组中不起作用(Javascript,Angular 2)
【发布时间】:2017-01-17 10:47:23
【问题描述】:

我有一个包含相机规格的数组,当我尝试运行 for 循环来获取元素时会出现问题。

这是我的数组的内容:

我尝试了所有不同类型的 for 循环,例如 forEach、带增量的基本 for 循环或 for (let item of myArray)

For 循环没有运行,我没有返回数组中的元素。

for (let id in elements) {

      if (typeof elements[id].brands !== 'undefined') {

        delete this.items;

        let itemsArray = [];

        for (let elementData of elements[id].brands) {

          this.http.get("assets/data/" + elementData + "Reflex.json").map(res => res.json()).subscribe(data => {

            Array.prototype.push.apply(itemsArray, data);

          });

        }

        this.items = itemsArray;

      }

      if (typeof elements[id].sensorSize !== 'undefined') {


      }

    }

this.items 是你可以在顶部看到的数组(我使用 Angular2))。

【问题讨论】:

  • 您可能通过 http 调用获得this.items,并且在您的代码到达循环时它尚未定义。
  • 你试过最基本的循环吗? for (let i=0; i
  • 可以在运行for循环的地方添加代码吗?
  • 你应该发布你的整个脚本,我认为问题不是来自 for 循环(或者我们都应该停止使用 JS 并继续罢工......),而是来自项目列表没有填充值。
  • 您确实意识到 this.http.get 是一个 http 调用,正如我在第一条评论中所说的那样,对吧?

标签: javascript arrays angular


【解决方案1】:

试试这段代码,它将迭代数组本身并将其中的所有项目作为内联函数中的对象返回。

this.items.forEach( function (item)
{
 item.xxx=11;
} );

【讨论】:

  • 我开始在手机上编辑答案的时候,还没有帖子,所以不知道有人在写。
  • @torazaburo sry..评论是针对米罗的
  • 我会让他试试看;)和平
【解决方案2】:
  this.http.get("assets/data/" + elementData + "Reflex.json").map(res => res.json()).subscribe(data => {

    Array.prototype.push.apply(itemsArray, data);

  });

这个调用有问题。它是异步的

for 循环不会等待响应将数据推送到itemArray。 获取数组的粗略方法是:

      this.http.get("assets/data/" + elementData + "Reflex.json").map(res => res.json()).subscribe(data => {

        Array.prototype.push.apply(this.items, data);//make sure this.items is set to empty previous to call

      });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多