Функция для инициализации массива с объектами
Пытаюсь написать функцию, создающую массив указанного размера.
function createArray(size, value) { return [...Array(size)].map(() => value) } let arr = createArray(2, []); arr[0].push(1); console.log(arr[1]); // [1] Проблема в том, что все элементы массива ссылаются на один и тот же объект, а хотелось бы получить массив с ссылками на разные копии value. |
R2R,
:-? () => [...value] |
рони, к сожалению, для массива с функциями и объектами это решение не подходит.
|
function createArray(size, value) { const isScalar = ['boolean', 'null', 'undefined', 'number', 'string', 'symbol'].indexOf(typeof value) >= 0; if (!isScalar) value = JSON.stringify(value); return Array.from({ length: size }, () => isScalar ? value : JSON.parse(value)); } var obj = createArray(2, {}), arr = createArray(2, []); obj[1].foo = 'bar'; arr[1].push(2); console.log(obj, arr); |
Ну допустим нет никакой адекватной причины клонировать функцию. А для всего остального тебе придётся писать(или гуглить) клонер со сложной логикой, учитывающей вложенность(в том числе рекурсивную, с которой JSON туда-сюда не поможет).
|
Часовой пояс GMT +3, время: 16:15. |