对象中的键值未正确填充

时间:2019-06-06 18:05:45

标签: javascript object javascript-objects key-value

我试图将对象的每个属性存储到一个对象数组中。

Ex:

{
  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:a},{keys:b}]

预期:[{a:a},{b:b}]

2 个答案:

答案 0 :(得分:4)

您需要使用computed property names。另外,我相信hasOwnProperty()在您的代码中是多余的,至少对于此特定示例而言,其中对象不继承可枚举的属性。查看for ... in描述。因此,您可以使用:

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;}

答案 1 :(得分:3)

在您的push语句中的变量上放置方括号,以使用Computed property names

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)