Пн goose: присвоение переменной - PullRequest
0 голосов
/ 01 апреля 2020

Это довольно просто, поэтому, если вы можете найти дубликат, опубликуйте его (потому что я не могу).

Итак, у меня есть объект, который я получаю из базы данных, и я хочу установить один из значения равны простой переменной в коде, вместо того, чтобы ссылаться на все это (обратите внимание, что user.info на самом деле является объектом, вложенным в массив).

let bar = user.info.foo.bar;

Скажем так: bar ( foo.bar) не определено, но в схеме задан тип String. Я хочу назначить bar (foo.bar) для строки с именем "foo", поэтому логически (по моему мнению) я устанавливаю bar равным "foo";

bar = "foo";

Когда я делаю это и Журнал и бар и фактическое значение (user.info.foo.bar) я получаю:

console.log(bar); // "foo"
console.log(user.info.foo.bar) // undefined

Почему этот бар определяется, но user.info.foo.bar нет, хотя они оба равны друг другу?

Нет проблем с user.info (он определен).

Ответы [ 3 ]

0 голосов
/ 01 апреля 2020

Когда вы присваиваете

let bar = user.info.foo.bar;

, значение бара обновляется текущим значением user.info.foo.bar. , Когда вы изменяете значение bar, оно отражается, потому что мы ничего не добавляли для изменения значения user.info.foo.bar.

Что вы можете сделать, это установить

user.info.foo.bar="foo";
let bar = user.info.foo.bar;
0 голосов
/ 01 апреля 2020

Я нашел обходной путь

Что я действительно хотел, так это присвоить user.info.foo.bar значение «foo» без фактического присвоения ему этого значения напрямую. Я могу сделать обходной путь, сделав "bar" функцией и передав ей значение и установив для user.info.foo.bar значение;

const bar = (value)=>{
  user.info.foo.bar = value;
  return value
}

Если я сделаю это так, я могу вызвать бар с любым значением, которое я хочу, и user.info.foo.bar будет равен этому значению, не устанавливая его равным этому значению напрямую (что я и хотел).

результат:

console.log(bar("foo")); // "foo"
console.log(user.info.foo.bar); // "foo"
0 голосов
/ 01 апреля 2020

Чтобы избежать мутаций в исходном объекте из БД, начните с его клонирования. Решение заключается в следующем:

let userInfo = {...user.info}
let bar = 'foo'
userInfo.foo.bar = bar

N / B: "bar" - это новый адрес памяти, и поэтому переназначение не влияет на объект "user.info" из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...