kursoriks
@kursoriks
Разработчик

Поведение массивов как в PHP на JS или JQUERY?

Доброго времени суток. Необходимо сохранять настройки в массив, он должен выглядеть таким образом:

array['window']['settings'] = { key: value);

При этом вызывать нужно так, array['window']['settings']['key] //value

Все перепробовал, однако простой JS не позволяет так делать, возможно есть какие-либо библиотеки для этого или функция.
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 3
rpsv
@rpsv
делай либо хорошо, либо никак
А в чем собственно проблема? Код ниже вполне работоспособен:
arr = {}
arr['window'] = {}
arr['window']['settings'] = {}
arr['window']['settings']['key'] = 123

// и так можно

arr = { window: { settings: { key: 123 } } }
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
однако простой JS не позволяет так делать, возможно есть какие-либо библиотеки для этого или функция

Вполне себе позволяет, только используются для этого не массивы, а объекты
Объекты надо инициировать заранее, то есть в существующий объект можно добавить новый ключ, но если объект не существует, то и добавлять этот ключ некуда.
Пример:
//у нас есть пустой объект array = {}
//Мы делаем следующее:
array['window']['settings'] = { key: value };
//На деле происходит все так:
{
let temp = array['window']; // undefined
temp['settings'] = { key: value }; // Ошибка, у undefined не может быть полей
}

Формально и это можно обойти с помощью Proxy (не работает и никак не полифилится в старых браузерах, все ie а так же safari ниже 10 сразу отпадают)
Но делать так не хорошо, ибо в такой реализации если мы запросимarray['window']['settings']['other_key'], то получим пустой объект, хотя ожидается undefined

Если Вас это не останавливает, могу накидать простенькую реализацию, дабы Вы сами смогли наступить на грабли плохого кода и научится на собственных ошибках
Ответ написан
let array = {
    window: {
        settings: {
            key1: 1,
            key2: 2
        }
    }
};
console.log(array['window']['settings']);
console.log(array.window.settings);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы