как я могу получить индекс в рекурсивной функции в javascript?

#javascript #arrays #function #object #recursion

Вопрос:

 let array = [1, [2, 3, [4, 5, ["six", "seven", 6666, [8, 9, [10]]]]]]
    //1.find last element
   //2. index way like in **console.log(array[1][2][2][3][2][0]** but should print 
  // [1][2][2][3][2][0] or 1,2,2,3,2,0
 

в этой функции я нахожу последний элемент, теперь я не могу найти 2-й вопрос
(это должна быть рекурсивная функция)

   function findLastElement (arr){
       for (let element of arr ){
          if(typeof element === "object"){
             findLastElement(element)
              console.log(element)
          }
       }
  }

findLastElement(array)
 

Ответ №1:

Вы можете использовать рекурсивную функцию, чтобы всегда брать последний индекс и продолжать, если последний элемент также является массивом:

 const getLessIndexes = arr => {
  const last = arr.length - 1
  
  return [
    last,
    ...Array.isArray(arr[last]) 
      ? getLessIndexes(arr[last]) 
      : []
  ]
}

const array = [1, [2, 3, [4, 5, ["six", "seven", 6666, [8, 9, [10]]]]]]

const result = getLessIndexes(array)

console.log(result) 

Комментарии:

1. большое вам спасибо

2. Добро пожаловать 🙂

3. извините, если это звучит глупо, но после возврата почему вы используете [] ?

4. Распространение массива работает с массивами или итерациями, поэтому, если последнее значение не является расширением массива, будет выдана ошибка.

Ответ №2:

Вы можете использовать Array.entries()

 function findLastElement (arr){
  for (let [index, element] of arr.entries() ){
    if(typeof element === "object"){
      findLastElement(element)
      console.log(element)
      console.log(index)
    }
  }
}

 

Ответ №3:

 let array = [1, [2, 3, [4, 5, ["six", "seven", 6666, [8, 9, [10]]]]]];

function findLastElement (arr){
  for (let [index, element] of arr.entries() ){
    if(typeof element === "object"){
      findLastElement(element)
      console.log(element)
      console.log(index)
    }
  }
}

console.log( findLastElement(array) )