从数组中提取数据并将其包含到javascript中的对象中

时间:2019-04-11 05:53:00

标签: javascript algorithm sorting

我有一个如下的javascript对象。

{
  name: "tom",
  age: 5,
  fruits: [
    {name: "apple",qty: 4},
    {name: "orange",qty: 13},
    {name: "banana",qty: 3}
  ]
}

我正在尝试将此对象转换为下面给出的对象。

{
  name: "tom",
  age: 5,
  apple: 4,
  orange: 13,
  banana: 3
}

我该如何实现?我试图遍历fruits数组,但是无法找到一种使用水果名称创建变量并将数量分配给它的方法。

3 个答案:

答案 0 :(得分:2)

您可以使用forEachdelete清理旧密钥。不过请注意不要意外覆盖密钥(您可以测试if (e.name in obj)作为安全检查)。

const obj = {
  name: "tom",
  age: 5,
  fruits: [
    {name: "apple",qty: 4},
    {name: "orange",qty: 13},
    {name: "banana",qty: 3}
  ]
};

obj.fruits.forEach(e => obj[e.name] = e.qty);
delete obj.fruits;

console.log(obj);

答案 1 :(得分:1)

您可以使用以下简单代码

  var b={
  name: "tom",
  age: 5}

  for (var i = 0; i<a.fruits.length; i++) {
     b[a.fruits[i].name]=a.fruits[i].qty;
  }

答案 2 :(得分:0)

这是一个通用函数,如果您不想变异原始对象,可以进行转换。 Destructure个对象,分别获取属性fruitsrest。然后,您可以使用Object.assign()map创建一个新对象。

let obj = {
  name: "tom",
  age: 5,
  fruits: [
    {name: "apple",qty: 4},
    {name: "orange",qty: 13},
    {name: "banana",qty: 3}
  ]
}

const converter = ({ fruits, ...rest }) => 
                    Object.assign(rest, ...fruits.map(({ name, qty }) => ({ [name]: qty })))

console.log(converter(obj))