Как передать значение переменной другому вызову в JavaScript? - PullRequest
0 голосов
/ 23 января 2020

У меня есть объект test, с полями a и b, которые имеют вложенные свойства и говорят:

test = {a: {key1: 'value1', key2: 'value2', key3: 'value3'},
       {b: {key1: 'value4', key2: 'value5', key3: 'value6'}}

Я хочу иметь возможность изменять вложенные значения внутри либо a или b, но у меня есть переменная, которую я меняю. Для ясности я хочу иметь возможность сделать что-то вроде:

test.$i$.key1: 'value10'

, где $i$ относится к значению, которое содержит i, в данном случае либо a, либо b.

Возможно ли это?

Я знаю, что это легко решить с помощью скобочных обозначений, но это не сработает в моей ситуации.

Скопировано из документации Firebase:

// Create an initial document to update.
var frankDocRef = db.collection("users").doc("frank");
frankDocRef.set({
    name: "Frank",
    favorites: { food: "Pizza", color: "Blue", subject: "recess" },
    age: 12
});

// To update age and favorite color:
db.collection("users").doc("frank").update({
    "age": 13,
    "favorites.color": "Red"
})
.then(function() {
    console.log("Document successfully updated!");
});

Я хочу иметь возможность:

const var1 = 'color'
db.collection("users").doc("frank").update({
    "age": 13,
    "favorites.$var1$": "Red"
})

, где $ var1 $ относится к значению, которое содержит $ va1r $, в данном случае либо food, color или subject.

В этом случае брекетная нотация не работает, так как я передаю строку в базу данных, которая не интерпретируется таким образом.

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Вы можете динамически получить доступ к свойству объекта, используя Обозначение в скобках .

Попробуйте следующий код:

var test = {
  a: {
    key1: 'value1',
    key2: 'value2',
    key3: 'value3'
  },
  b: {
    key1: 'value4',
    key2: 'value5',
    key3: 'value6'
  }
};

var key = 'a';
console.log(test[key].key1);
1 голос
/ 23 января 2020

Либо используйте вычисляемое свойство :

const var1 = 'color'
db.collection("users").doc("frank").update({
    "age": 13,
    ["favorites." + var1]: "Red"
})

, либо создайте объект "снаружи" вызова обновления:

const var1 = 'color'

const data = { "age": 13 };
data["favorites." + var1] = "Red";

db.collection("users").doc("frank").update(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...