@Ivan1331

JavaScript установить ключ объекта по переменной?

Мне нужно, в дата атрибут записывать ключ объекта и потом вносить изменения в обьект. Когда это обычный ключ, я понимаю как это делать, я могу просто брать, obj[key], однако что делать если у меня есть вот такой объект
{
    "id": id,
    "name": "",
    "username": "",
    "email": "",
    "address": {
      "street": "",
      "suite": "",
      "city": "",
      "zipcode": "",
    },
    "phone": "",
    "website": "",
    "company": {
      "name": ""
    }
  };

и я хочу сделать записать в address в ключ street, как мне в этом случае делать?
UPD. я немного наверное неточно написал, вот код моего листенера
content.addEventListener('change', (e) => {
  let id = e.target.closest('.user').getAttribute('data-id');
  let key = e.target.getAttribute('data-input');
  let value = e.target.value;
  let changes = {
    "id": id,
    "name": "",
    "username": "",
    "email": "",
    "address": {
      "street": "",
      "suite": "",
      "city": "",
      "zipcode": "",
    },
    "phone": "",
    "website": "",
    "company": {
      "name": ""
    }
  };
  changes[key]=value; //вот тут, мне нужно как то написать что бы оно заносило и при условии что это id, и при условии что это street adreess

});
  • Вопрос задан
  • 346 просмотров
Решения вопроса 2
Lynn
@Lynn
nginx, js, css
Взять lodash.set или аналог. Или написать свою функцию (это несложно)

https://lodash.com/docs/#set
Ответ написан
@Ivan1331 Автор вопроса
Вот нашел идеально решение
function setToValue(obj, prop, val) {
  let props = prop.split('.'),
    final = props.pop(),
    p;

  for (var i = 0; i < props.length; i++) {
    p = props[i];
    if (typeof obj[p] === 'undefined') {
      if (typeof val !== 'undefined') {
        if (i != props.length)
          obj[p] = {};
      } else
        return undefined;
    }
    obj = obj[p];
  }
  return typeof val !== "undefined" ? (obj[final] = val) : obj[final];
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@antares4045
obj["address"]["street"] вас чем-то не устраивает?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы