【问题标题】:For loop run when I use i but don't when I use something different当我使用 i 时循环运行,但当我使用不同的东西时不运行
【发布时间】:2021-06-21 16:30:19
【问题描述】:

我是使用 javascript 的初学者。所以如果这个问题看起来很愚蠢,请不要对我大喊大叫。我被困住了,所以我问。 实际上,我正在做一个项目,我必须稍微操作数据,但我不知道为什么它不起作用。 这是我的代码


var data = [
  {
    _id: "5fb86715f916fb0011bfad61",
    lastest_volume: 418,
    modificationDate: "2020-11-21T01:02:13.673Z",
  },
  {
    _id: "5fb9de1df916fb0011ca0ff3",
    lastest_volume: 419,
    modificationDate: "2020-11-22T03:42:21.107Z",
  },
  {
    _id: "5fbb31e2f916fb0011d13555",
    lastest_volume: 421,
    modificationDate: "2020-11-23T03:52:02.960Z",
  }
]
var re = /-/gi
for (let i in data) {
  data[i].modificationDate = data[i].modificationDate.slice(0, 10);
  data[i].modificationDate = data[i].modificationDate.replace(re, "");
  let j = +i + 1;

  data[i].lastest_volume = data[val].lastest_volume - data[i].lastest_volume;
}
console.log(data);

它给了我这个错误


data[i].lastest_volume = data[j].lastest_volume - data[i].lastest_volume;
                                     ^

TypeError: Cannot read property 'lastest_volume' of undefined

当我使用 i 时它可以工作,但如果我使用 j 而不是 i 则它不起作用

【问题讨论】:

  • 在第三次迭代中,i=2 和 j =3,您正在尝试访问 data[3].latest_volume,其中数组的长度仅为 3,因此不会有 data[3] .
  • 而且错误与发布的代码不一致。
  • @DaveNewton 他有一个错字(val 而不是 j),但根本问题是 Raghuraman Kesavan 指出的。
  • @nitrin0 是的,我知道(因此是“和”)——我的意思是发布的代码应该是有问题的代码,以避免追逐红鲱鱼。
  • @DaveNewton 很公平:)

标签: javascript arrays for-loop types


【解决方案1】:

问题是data[val].lastest_volume 中的“val”。 “val”还没有被定义,所以它以data[undefined] 出现。我还注意到,在上一行中,let j, 后面没有使用 j;我猜你打算使用data[j] 而不是[val]

j 也有问题。 = +i 中的加号; javascript 不知道如何处理它,因此它也转换为let j = undefined + 1,无论 for 循环进展多远,它始终为 1。 (您可能会想到语法 i++,它将 1 加到 i,但您不是要在此处更改 i,而是要设置 j。) 编辑:哎呀——对,即+ 将字符串强制转换为数字。

【解决方案2】:

使用地图功能会好很多

let data = [{
    _id: "5fb86715f916fb0011bfad61",
    lastest_volume: 418,
    modificationDate: "2020-11-21T01:02:13.673Z",
  },
  {
    _id: "5fb9de1df916fb0011ca0ff3",
    lastest_volume: 419,
    modificationDate: "2020-11-22T03:42:21.107Z",
  },
  {
    _id: "5fbb31e2f916fb0011d13555",
    lastest_volume: 421,
    modificationDate: "2020-11-23T03:52:02.960Z",
  }
]
let re = /-/gi;

let result = data.map(function(r, i, arr) {

  r.modificationDate = r.modificationDate.slice(0, 10);
  r.modificationDate = r.modificationDate.replace(re, "");

  let j = i + 1;
  let val = (j >= data.length) ? -1 : j;

  if (val > 0) {
    r.lastest_volume = arr[val].lastest_volume - arr[i].lastest_volume;
  } else {
    r.lastest_volume = 'Last Item';
  }

  return r;
});


console.log(result);

【讨论】:

    【解决方案3】:

    var data = [{
        _id: "5fb86715f916fb0011bfad61",
        lastest_volume: 418,
        modificationDate: "2020-11-21T01:02:13.673Z",
      },
      {
        _id: "5fb9de1df916fb0011ca0ff3",
        lastest_volume: 419,
        modificationDate: "2020-11-22T03:42:21.107Z",
      },
      {
        _id: "5fbb31e2f916fb0011d13555",
        lastest_volume: 421,
        modificationDate: "2020-11-23T03:52:02.960Z",
      }
    ]
    var re = /-/gi
    for (let i = 0; i < data.length; i++) {
      data[i].modificationDate = data[i].modificationDate.slice(0, 10);
      data[i].modificationDate = data[i].modificationDate.replace(re, "");
      let j = i + 1;
    
    
    
      /*this code changes j to index 0 if j is greater than data.length*/
      let val = (j >= data.length) ? 0 : j;
    
    
      data[i].lastest_volume = data[val].lastest_volume - data[i].lastest_volume;
    }
    console.log(data);

    【讨论】:

      猜你喜欢
      • 2017-01-31
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 2020-08-01
      相关资源
      最近更新 更多