将对象内部的对象数组创建为多个对象 JavaScript

Make an array of objects inside object as multiple objects JavaScript

我需要转换父对象中多个对象中的对象数组:

实际对象:

{
name: 'John Doe',
Age: 50,
email: 'j@gmail.com'
wishlist: [
   {product1 : 1},
   {product2 : 3},
   {product3 : 5},
   {product4 : 2},
 ]
}

目标:

{

name: 'John Doe',
Age: 50,
email: 'j@gmail.com',
product1 : 1,
product2 : 3,
product3 : 5,
product4 : 2,

}

有人知道怎么做吗? 亲切的问候,

在心愿单数组上使用 reduce() 方法,然后使用 spread 运算符创建最终对象。

const myObj = {
name: 'John Doe',
Age: 50,
email: 'j@gmail.com',
wishlist: [
   {product1 : 1},
   {product2 : 3},
   {product3 : 5},
   {product4 : 2},
 ]
}

const processData = (data) => {
  const wishlist = data.wishlist.reduce((result, obj) => {
     return {...result, ...obj};
  }, {});
  const finalObj = {...data, ...wishlist};
  delete finalObj.wishlist;
  return finalObj;
}

console.log(processData(myObj));

您可以合并所有产品,然后将它们与对象合并,然后删除初始数组。我认为这种方式更好,而不是在迭代其属性之一的同时修改原始对象。

let products = {} 
for (let product of obj.wishlist)
   products = {...products, ...product}
obj = {...obj, ...products}
delete obj.wishlist

你可以试试这个,

var obj = {
  name: 'John Doe',
  Age: 50,
  email: 'j@gmail.com',
  wishlist: [{ product1: 1 }, { product2: 3 }, { product3: 5 }, { product4: 2 }]
};

var newObj = Object.assign({}, ...obj.wishlist);
delete obj.wishlist;

const finalObj = { ...obj, ...newObj };
console.log(finalObj);

您可以使用 destructuring to grab your wishlist array, and an object of properties excluding your whishlist array (stored in r), which you can then use Object.assign() with the spread syntax 将您愿望清单数组中的所有对象合并到您的 r 对象中:

const {wishlist, ...r} = { name: 'John Doe', Age: 50, email: 'j@gmail.com', wishlist: [ {product1 : 1}, {product2 : 3}, {product3 : 5}, {product4 : 2}, ] };

const res = Object.assign(r, ...wishlist);
console.log(res);

如果有人正在寻找更通用的答案。

我编写了代码来在另一个对象或数组中转换对象或数组。

如果你问我就太过分了。

const sample = [{
  name: 'John Doe',
  Age: 50,
  email: 'j@gmail.com',
  wishlist: [{ product1: 1 }, { product2: 3 }, { product3: 5 }, { product4: 2 }]
}];

const transformArray = array => {
    let obj = {};
    array.forEach(item => {
        if (Array.isArray(item)) {
            obj = { ...obj, ...transformArray(item)};
        } else if (typeof item == 'object') {
            obj = { ...obj, ...transformObj(item)};
        }
    });
    return obj;
}

const transformObj = object => {
    let obj = {};
    Object.keys(object).forEach(key => {
        const item = object[key];
        if (Array.isArray(item)) {
            obj = { ...obj, ...transformArray(item) };
        } else if (typeof item == 'object') {
            obj = { ...obj, ...transformObj(item) };
        } else {
            obj = { ...obj, [key]: item };
        }
    });
    return obj;
}

console.log(transformObj(sample));