【问题标题】:Javascript why array.slice() doesn't work when the first value is 0?Javascript为什么当第一个值为0时array.slice()不起作用?
【发布时间】:2016-10-18 21:44:52
【问题描述】:

我有个问题,不明白为什么arr.slice在第一个值为0时不起作用,返回数组为空:

function chunkArrayInGroups(arr, size) {
  var newArr = [];

  for (var i = 0; arr[i]; i += size) {
    newArr.push(arr.slice(i, i + size));
  }
  return newArr;
}
console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3));

【问题讨论】:

  • 这是什么:for (var i = 0; arr[i]; i += size) {?
  • 你期待什么结果?

标签: javascript


【解决方案1】:

您使用条件结束直接循环,其计算结果为false

arr[i] -> arr[0] -> 0 -> false -> end for loop

使用数组的长度作为检查

for (var i = 0; i < arr.length; i += size) {
//              ^^^^^^^^^^^^^^

function chunkArrayInGroups(arr, size) {
  var newArr = [];

  for (var i = 0; i < arr.length; i += size) {
    newArr.push(arr.slice(i, i + size));
  }
  return newArr;
}
console.log(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3));

【讨论】:

  • 但为什么它的评估结果为 false ?我想在数组的情况下访问,为什么 arr[0] 的值为 0 时不起作用?
  • 好的,我明白了,我的错误 ^^" arr[i] 阻塞了我的循环...我将其更正为 i
【解决方案2】:

试试这个

  function chunkArrayInGroups(arr, size) {
  // Break it up.
  var  newArr = [];

 for (var i = 0; typeof arr[i]!='undefined'; i += size) {
  newArr.push(arr.slice(i, i + size));
 }
  return newArr;
 }
chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3)

【讨论】:

    【解决方案3】:

    问题是arr[i] 而不是arr.slice

    [0, 1, 2, 3, 4, 5 ,6] 的第一个元素为 0,为假。

    只需在for 语句中使用其他条件,例如i &lt; arr.length

    【讨论】:

      【解决方案4】:

      for (var i = 0; arr[i]; i += size),arr[0]0,意思是false,所以循环永远不会进入

      【讨论】:

        猜你喜欢
        • 2017-08-29
        • 1970-01-01
        • 2021-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 2011-03-21
        相关资源
        最近更新 更多