当第一个值为0时,为什么array.slice()不起作用?

时间:2016-10-18 07:27:42

标签: javascript

我有问题,我不明白为什么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));

4 个答案:

答案 0 :(得分:5)

您最终使用条件指向循环,该条件的计算结果为false

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

使用数组的长度作为检查

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

&#13;
&#13;
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));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

试试这个

  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)

答案 2 :(得分:0)

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

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

i < arr.length声明中使用for等其他条件。

答案 3 :(得分:-1)

var titles = ['Value1', 'Value2', 'Value3']; function TitleSwitch() { var counter = 0, fn = function () { $(document).prop('title', titles[counter]); counter++; counter %= titles.length; }; fn(); return fn; } setInterval(TitleSwitch(), 5000); // Here, you can modify your titles in an ajax call for (var i = 0; arr[i]; i += size)arr[0],表示0,因此永远不会输入循环