Извлечь данные из массива и включить его в объект в JavaScript - PullRequest
1 голос
/ 11 апреля 2019

У меня есть объект 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
}

Как мне этого добиться?Я попытался перебрать массив фруктов, но не могу найти способ создать переменную с именем фрукта и присвоить ему кол-во.

Ответы [ 3 ]

2 голосов
/ 11 апреля 2019

Вы можете использовать forEach и delete для очистки старого ключа. Будьте осторожны, чтобы случайно не перезаписать ключи (вы можете проверить 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 голос
/ 11 апреля 2019

Вы можете использовать ниже простой код

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

  for (var i = 0; i<a.fruits.length; i++) {
     b[a.fruits[i].name]=a.fruits[i].qty;
  }
0 голосов
/ 11 апреля 2019

Это универсальная функция для преобразования, если вы не хотите изменять исходный объект. Уничтожить объект, чтобы получить fruits и rest свойств отдельно. Затем вы можете использовать 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))
...