#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) )