JavaScript рекурсия: получить длину массива с помощью рекурсии, не обращаясь к его свойству длины - PullRequest
1 голос
/ 15 июня 2019

Получить длину массива с помощью рекурсии, не обращаясь к его свойству длины.

Мой код ниже:

function getLength(array, count=0) {

  if (array.length === 0){
    return 0
  }

  else {
    count ++; 

    array.pop()
    return getLength(array, count)
  }
  return count; 
}

// To check if you've completed the challenge, uncomment these console.logs!
console.log(getLength([1])); // -> 1
console.log(getLength([1, 2])); // -> 2
console.log(getLength([1, 2, 3, 4, 5])); // -> 5
console.log(getLength([], 0)); // -> 0

Когда я запускаю свой код на третьем console.log:

console.log(getLength([1, 2])); 

возвращает 0 вместо 2

Что я делаю не так?

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

разобрался:

function getLength(array, count=0) {

  if (array.length === 0){
    return count
  }

  else {
    count ++; 

    array.pop()
    return getLength(array, count)
  } 
}

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Вы можете проверить, существует ли элемент с нулевым индексом.Это работает только для не разреженных массивов.

function getLength(array) {
    return 0 in array ? 1 + getLength(array.slice(1)) : 0;
}

console.log(getLength([1]));             // 1
console.log(getLength([1, 2]));          // 2
console.log(getLength([1, 2, 3, 4, 5])); // 5
console.log(getLength([], 0));           // 0
0 голосов
/ 15 июня 2019

Другое простое решение (которое также не работает с разреженными массивами) -

const len1 = arr => arr.reduce(n => n + 1, 0)

И связанный, но менее простой, он работает с разреженными массивами:

const len2 = (arr) => Array.from(arr, _ => 1).reduce(n => n + 1, 0)
...