Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Menapis Objek JavaScript Tanpa Mengubah Suai Prototaip Asli?

Bagaimana untuk Menapis Objek JavaScript Tanpa Mengubah Suai Prototaip Asli?

Barbara Streisand
Barbara Streisandasal
2024-11-27 11:47:11535semak imbas

How to Filter JavaScript Objects Without Modifying the Native Prototype?

Penapisan Objek dalam JavaScript Menggunakan Sambungan Prototaip

ECMAScript 5 memperkenalkan kaedah penapis() untuk jenis Array, tetapi bukan untuk jenis Objek. Ini menimbulkan persoalan tentang cara melaksanakan kaedah penapis() untuk Objek dalam JavaScript.

Pelaksanaan Penapis Objek Tersuai

Satu pendekatan ialah memanjangkan Object.prototype dengan kaedah penapis tersuai():

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

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

    return result;
};

Pelaksanaan ini menggunakan gelung untuk mengulangi sifat objek sendiri dan menyemak sama ada fungsi predikat mengembalikan benar atau salah untuk setiap nilai. Jika palsu, pasangan nilai kunci ditambahkan pada objek hasil.

Walau bagaimanapun, memanjangkan Object.prototaip asli dianggap amalan buruk, kerana ia boleh menyebabkan konflik dengan perpustakaan atau kod lain.

Pendekatan Alternatif

Daripada memanjangkan Object.prototype, terdapat beberapa alternatif pendekatan untuk menapis objek dalam JavaScript:

  • 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), {});
  • Menggunakan peta dan sebar sintaks:
Object.filter = (obj, predicate) => {
    const filteredValues = Object.keys(obj).map((key) => {
        if (predicate(obj[key])) {
            return [key, obj[key]];
        }
    }).filter(Boolean);

    return Object.fromEntries(filteredValues);
};
  • Menggunakan Object.entry dan Object.fromEntries:
Object.filter = (obj, predicate) => {
    const filteredEntries = Object.entries(obj).filter(
        ([key, value]) => predicate(value)
    );

    return Object.fromEntries(filteredEntries);
};

Contoh Penggunaan

Mari menapis objek menggunakan salah satu pendekatan alternatif ini:

const scores = { John: 2, Sarah: 3, Janet: 1 };

// Using the `reduce` and `Object.keys` approach:
const filteredScores = Object.filter(scores, (score) => score > 1);

console.log(filteredScores); // { Sarah: 3 }

Dengan menggunakan kaedah alternatif ini, anda boleh menapis objek dalam JavaScript tanpa melanjutkan prototaip asli.

Atas ialah kandungan terperinci Bagaimana untuk Menapis Objek JavaScript Tanpa Mengubah Suai Prototaip Asli?. 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