Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.10.2018, 20:12
R2R R2R вне форума
Интересующийся
Отправить личное сообщение для R2R Посмотреть профиль Найти все сообщения от R2R
 
Регистрация: 22.08.2018
Сообщений: 13

Функция для инициализации массива с объектами
Пытаюсь написать функцию, создающую массив указанного размера.

function createArray(size, value) {
  return [...Array(size)].map(() => value)
}

let arr = createArray(2, []);
arr[0].push(1);
console.log(arr[1]);  // [1]

Проблема в том, что все элементы массива ссылаются на один и тот же объект, а хотелось бы получить массив с ссылками на разные копии value.
Ответить с цитированием
  #2 (permalink)  
Старый 10.10.2018, 20:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

R2R,

() => [...value]
Ответить с цитированием
  #3 (permalink)  
Старый 10.10.2018, 20:41
R2R R2R вне форума
Интересующийся
Отправить личное сообщение для R2R Посмотреть профиль Найти все сообщения от R2R
 
Регистрация: 22.08.2018
Сообщений: 13

рони, к сожалению, для массива с функциями и объектами это решение не подходит.
Ответить с цитированием
  #4 (permalink)  
Старый 10.10.2018, 20:45
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,728

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);
Ответить с цитированием
  #5 (permalink)  
Старый 10.10.2018, 20:47
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,493

Ну допустим нет никакой адекватной причины клонировать функцию. А для всего остального тебе придётся писать(или гуглить) клонер со сложной логикой, учитывающей вложенность(в том числе рекурсивную, с которой JSON туда-сюда не поможет).
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи с книги "Выразительный Js", Написать функцию для создания массива AlePawka Общие вопросы Javascript 4 01.06.2018 22:57
Если элемента нет, а в скрипте есть для него функция MC-XOBAHCK Общие вопросы Javascript 4 07.04.2018 23:42
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31
Переодическое обновление значений для графика, функция для обновления значений yupa87 Общие вопросы Javascript 0 09.07.2009 14:48
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53