Fungsi pemetaan objek: lanjutkan fungsi Peta kepada objek
P粉060528326
P粉060528326 2023-10-08 19:58:09
0
2
752

Saya ada objek:

myObject = { 'a': 1, 'b': 2, 'c': 3 }

Saya sedang mencari kaedah asli yang serupa denganArray.prototype.mapyang boleh digunakan seperti ini:

newObject = myObject.map(function (value, label) { return value * value; }); // newObject is now { 'a': 1, 'b': 4, 'c': 9 }

Adakah JavaScript mempunyai fungsimapuntuk objek sedemikian? (Saya mahukan ini untuk Node.JS, jadi saya tidak mengambil berat tentang isu merentas penyemak imbas.)

P粉060528326
P粉060528326

membalas semua (2)
P粉138871485

Bagaimana pula dengan menulis satu ayat setiap baris menggunakan JSES10 / ES2019?

GunakanObject.entries( )Object.fromEntries():

let newObj = Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, v * v]));

Tulis perkara yang sama sebagai fungsi:

function objMap(obj, func) { return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, func(v)])); } // To square each value you can call it like this: let mappedObj = objMap(obj, (x) => x * x);

Fungsi ini juga menggunakan rekursi ke objek bersarang segi empat sama:

function objMap(obj, func) { return Object.fromEntries( Object.entries(obj).map(([k, v]) => [k, v === Object(v) ? objMap(v, func) : func(v)] ) ); } // To square each value you can call it like this: let mappedObj = objMap(obj, (x) => x * x);

DalamES7/ES2016, anda tidak boleh menggunakanObjects.fromEntries,但您可以使用Object.assigndenganpengendali sebarandannama kunci yang dikiraSintaks:

let newObj = Object.assign({}, ...Object.entries(obj).map(([k, v]) => ({[k]: v * v})));

ES6 / ES2015tidak dibenarkanObject.entries,但您可以使用Object.keysditukar kepada:

let newObj = Object.assign({}, ...Object.keys(obj).map(k => ({[k]: obj[k] * obj[k]})));

ES6 juga memperkenalkan gelungfor...of, membenarkan gaya yang lebih penting:

let newObj = {} for (let [k, v] of Object.entries(obj)) { newObj[k] = v * v; }


array.reduce()

Anda juga boleh menggunakanreduceuntuk ini:

let newObj = Object.entries(obj).reduce((p, [k, v]) => ({ ...p, [k]: v * v }), {});


Sifat warisan dan rantai prototaip:

Dalam beberapa kes yang jarang berlaku, anda mungkin perlu memetakan objekkelasyang ada dalamrantai prototaipnya. Dalam kes ini,Object.keys()Object.keys()Object.entries()danObject.entry()

tidak akan berfungsi kerana fungsi ini tidak mengandungi rantai prototaip.

Jika anda perlu memetakan sifatwarisanfor (key in myObj) {...}, anda boleh menggunakan untuk (masukkan myObj) {...}

.

Berikut adalah contoh situasi sedemikian:

const obj1 = { 'a': 1, 'b': 2, 'c': 3} const obj2 = Object.create(obj1); // One of multiple ways to inherit an object in JS. // Here you see how the properties of obj1 sit on the 'prototype' of obj2 console.log(obj2) // Prints: obj2.__proto__ = { 'a': 1, 'b': 2, 'c': 3} console.log(Object.keys(obj2)); // Prints: an empty Array. console.log(Object.entries(obj2)); // Prints: an empty Array. for (let key in obj2) { console.log(key); // Prints: 'a', 'b', 'c' }
Tetapi tolong bantu saya dan elakkanwarisan. :-)
    P粉826429907

    Tidak sampaiObject对象的本机map, tetapi bagaimana pula dengan ini:

    var myObject = { 'a': 1, 'b': 2, 'c': 3 }; Object.keys(myObject).forEach(function(key, index) { myObject[key] *= 2; }); console.log(myObject); // => { 'a': 2, 'b': 4, 'c': 6 }
      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!