Saya perlu mengubah array objek di beberapa objek di dalam objek induk:

Objek sebenarnya:

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

Tujuan:

{

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

}

Adakah seseorang yang tau bagaimana cara melakukannya? Salam,

2
futuraVita 12 Mei 2021, 12:21

5 jawaban

Jawaban Terbaik

Gunakan metode reduce() pada array daftar keinginan dan kemudian buat objek akhir menggunakan operator 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));
2
Rahul Kumar 12 Mei 2021, 09:38

Jika ada yang mencari jawaban yang lebih umum.

Saya telah menulis kode untuk mengubah Objek atau Array di dalam Objek atau Array lain.

Berlebihan jika Anda bertanya kepada saya.

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));
0
Nisanth Reddy 12 Mei 2021, 09:43

Anda dapat mencoba ini,

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);
0
Geethanjali R 12 Mei 2021, 09:39

Anda dapat menggunakan destructuring untuk mengambil wishlist, dan objek properti yang mengecualikan array whishlist Anda (disimpan di r), yang kemudian dapat Anda gunakan Object.assign() dengan sintaksis spread untuk menggabungkan semua objek dari larik daftar keinginan Anda ke dalam objek r Anda:

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);
1
Nick Parsons 12 Mei 2021, 09:40

Anda dapat menggabungkan semua produk, lalu menggabungkannya dengan objek, lalu menghapus larik awal. Saya pikir cara ini lebih baik, tidak memodifikasi objek asli sambil mengulangi salah satu atributnya.

let products = {} 
for (let product of obj.wishlist)
   products = {...products, ...product}
obj = {...obj, ...products}
delete obj.wishlist
1
Miguel 12 Mei 2021, 09:35