В вашем конкретном случае, поскольку Array.prototype.fill()
заполняется одним значением, а в объектах JS (например, массивы) являются ссылочными типами, все индексы содержат ссылку на первую. В JS создание массива ND может быть не таким простым, как кажется, поскольку массивы будут скопированы по ссылке. Для функции общего назначения arrayND
вам понадобится функция утилиты клонирования массива. Давайте посмотрим:
Array.prototype.clone = function(){
return this.map(e => Array.isArray(e) ? e.clone() : e);
};
function arrayND(...n){
return n.reduceRight((p,c) => c = (new Array(c)).fill().map(e => Array.isArray(p) ? p.clone() : p ));
}
var array3D = arrayND(5,5,5,"five");
array3D[0][1][2] = 5;
console.log(array3D);
Функция arrayND принимает неопределенное количество аргументов. Последний обозначает значение по умолчанию для заполнения нашего массива ND, а предыдущие аргументы - это размеры каждого измерения, которое они представляют. (первый аргумент - размер 1, второй аргумент - размер 2 и т. д.)
Это код из записной книжки Jupyter, который хранится в формате JSON и не может быть запущен непосредственно Python. Чтобы исправить это, удалите все, что не соответствует атрибуту 'source'
.