Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Menapis Sifat dalam Objek JavaScript?

Bagaimanakah Saya Boleh Menapis Sifat dalam Objek JavaScript?

Susan Sarandon
Susan Sarandonasal
2024-11-11 20:46:03471semak imbas

How Can I Filter Properties in a JavaScript Object?

Kaedah JavaScript filter() untuk Objek

Walaupun jenis Array mempunyai kaedah penapis(), jenis Objek tidak. Artikel ini bertujuan untuk menyediakan penyelesaian untuk melaksanakan kaedah sedemikian.

Pelaksanaan Penapis Objek Tersuai

Satu pendekatan melibatkan memanjangkan Object.prototype:

Object.prototype.filter = function(predicate) {
    var result = {};

    for (key in this) {
        if (this.hasOwnProperty(key) && !predicate(this[key])) {
            result[key] = this[key];
        }
    }

    return result;
};

Alternatif Penyelesaian

Walau bagaimanapun, meluaskan prototaip global secara amnya tidak digalakkan. Sebaliknya, pertimbangkan alternatif ini:

1. Menggunakan Reduce dan Object.keys

Object.filter = (obj, predicate) =>
    Object.keys(obj)
        .filter(key => predicate(obj[key]))
        .reduce((res, key) => (res[key] = obj[key], res), {});

2. Sintaks Peta dan Sebarkan

Object.filter = (obj, predicate) =>
    Object.fromEntries(
        Object.entries(obj)
            .filter(([key, value]) => predicate(value))
            .map(([key, value]) => [key, value])
    );

3. Object.assign

const filter = (obj, predicate) =>
    Object.assign(
        {},
        ...Object.keys(obj)
            .filter(key => predicate(obj[key]))
            .map(key => ({[key]: obj[key]}))
    );

Contoh Penggunaan

var foo = { bar: "Yes", moo: undefined };

var filtered = Object.filter(foo, property => typeof property === "undefined");

console.log(filtered); // { moo: undefined }

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menapis Sifat dalam Objek JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn