#javascript #arrays #get #set
#javascript #массивы #получить #установить
Вопрос:
самый быстрый способ выбрать последний элемент из массива — это
array[length - 1]
Однако, когда я получаю больший вложенный массив, я получаю что-то вроде этого:
let last_item = pathsry[
pathsry.length - 1
][
pathsry[
pathsry.length - 1
].length - 1
]
Это нехорошо, поэтому я переписал следующее, чтобы получить последнее значение.
// get item at last index
Array.prototype.last = String.prototype.last = function(){
return this[this.length - 1];
}
что позволяет мне получить
var arr = [[1, 2], [2, 3], [['a', 'b'], ['c', 'd']]];
console.log(arr.last().last().last());
// 'd'
Однако, если я попытаюсь установить:
Array.prototype.last = function(){
return this[this.length - 1];
}
var arr = [[1, 2], [2, 3], [['a', 'b'], ['c', 'd']]];
arr.last().last().last() = 'dd';
// ReferenceError: Invalid left-hand side in assignment
есть ли способ, которым я могу написать функцию, которая принимает число в качестве параметра, который указывает вложенные фрагменты, и необязательный параметр заданного значения, который:
function arrayLast(arr, nes, val){
// ...
}
var arra = [[1, 2], [2, 3], [['a', 'b'], ['c', 'd']]];
console.log(arrayLast(arra, 3));
// d
arrayLast(arra, 3, 'dd');
console.log(arra);
// arr = [[1, 2], [2, 3], [['a', 'b'], ['c', 'dd']]]
спасибо за вашу помощь
Комментарии:
1. Я особенно не хочу использовать
flat
, поскольку это снижает производительность
Ответ №1:
Это должно помочь!
Array.prototype.last = function(val=null) {
if (this.length === 0) {
if (val) this[0] = val;
else return null;
}
temp = this;
while(typeof temp[temp.length-1] === "object") {
temp = temp[temp.length-1];
}
if (val) temp[temp.length-1] = val; //Setter
else return temp[temp.length-1]; //Getter
}
var arr = [[1, 2], [2, 3], [['a', 'b'], ['c', 'd']]];
console.log(arr.last()); // 'd'
arr.last("dd");
console.log(arr); // [ [ 1, 2 ], [ 2, 3 ], [ [ 'a', 'b' ], [ 'c', 'dd' ] ] ]