значение ключа в объекте заполнено неправильно - PullRequest
2 голосов
/ 06 июня 2019

Я пытаюсь сохранить каждое свойство объекта в массиве Object.

Пример:

{
  a: b,
  c: d
}

до

[
  { a: b }, 
  { c: d }
]

Ниже приведен код, который я пытаюсь выполнить.

var a = {
  a: "a",
  b: "b"
}

var newA = []

for (var keys in a) {
  if (a.hasOwnProperty(keys)) {
    newA.push({
      keys: a[keys]
    })
  }
}

console.log(newA)

Когда я помещаю свойство в массив «newA», значение ключа передается как «keys» вместо исходного имени ключа.

Результат: [{keys: a}, {keys: b}]

Ожидается: [{a: a}, {b: b}]

Ответы [ 2 ]

4 голосов
/ 06 июня 2019

Вам необходимо использовать вычисленные имена свойств . Также я считаю, что hasOwnProperty() является избыточным в вашем коде, по крайней мере, для этого конкретного примера, где ваш объект не наследует перечислимые свойства. Посмотрите на для ... в описании. Таким образом, вы можете пойти с:

for (const key in a)
{
    newA.push({[key] : a[key]});
}

Однако в качестве альтернативы вы можете использовать Object.entries () и Array.map () :

var a = {a : "a", b : "b"};

let res = Object.entries(a).map(([k,v]) => ({[k]: v}));

console.log(res);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
3 голосов
/ 06 июня 2019

Используйте Computed property names, поместив скобки вокруг переменной keys в вашем выражении push:

newA.push({ [keys]: a[keys] })

Пример в действии:

var a = {
  a: "a",
  b: "b"
}

var newA = []

for (var keys in a) {
  if (a.hasOwnProperty(keys)) {
    newA.push({
      [keys]: a[keys]
    })
  }
}

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