Saya ingin memilih properti objek berdasarkan nilai properti bersarang objek. Saya menggunakan metode Lodash pick() sebagai berikut.

const object = {
  a: {x: true, y: true,}
  b: {x: true, y: false,},
  c: {x: true, y: true,},
};

_.pick(object, y,);

Saya berharap untuk melihat hasil berikut:

{
  a: {x: true, y: true,}
  c: {x: true, y: true,}
}

Tapi, sebaliknya, saya mendapatkan kesalahan ini.

Tidak dapat berjalan karena Kesalahan Sintaks pada Baris 6
Token tak terduga, diharapkan , (6:2)

Apa yang saya lakukan salah?

Catatan: Jika tidak ada solusi Lodash yang elegan, saya akan mengambil Javascript polos yang elegan.

0
Let Me Tink About It 7 Januari 2020, 12:08

2 jawaban

Jawaban Terbaik

Gunakan _.pickBy(), dan tetapkan properti y sebagai predikat:

const object = {
  a: {x: true, y: true,},
  b: {x: true, y: false,},
  c: {x: true, y: true,},
};

const result = _.pickBy(object, 'y');

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

Tanpa lodash, Anda dapat menggunakan Object.entries() untuk mengonversi objek menjadi larik pasangan [kunci, nilai], memfilter menurut properti y dari value, dan mengonversi kembali ke objek menggunakan Object.fromEntries():

const object = {
  a: {x: true, y: true,},
  b: {x: true, y: false,},
  c: {x: true, y: true,},
};

const result = Object.fromEntries(
  Object.entries(object)
    .filter(([, o]) => o.y)
);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
1
Ori Drori 7 Januari 2020, 09:17

Kesalahan sintaks Anda sebenarnya disebabkan oleh koma yang hilang dalam definisi Anda tentang object. pick mungkin bukan yang Anda inginkan, bagaimana dengan sesuatu seperti:

const object = {
  a: {x: true, y: true,},
  b: {x: true, y: false,},
  c: {x: true, y: true,},
};

_.filter(object, (e) => e.y);
1
wobr 7 Januari 2020, 09:15