Rumah > Soal Jawab > teks badan
Saya ada objek:
myObject = { 'a': 1, 'b': 2, 'c': 3 }
Saya sedang mencari kaedah asli yang serupa dengan Array.prototype.map
yang 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 fungsi map
untuk objek sedemikian? (Saya mahukan ini untuk Node.JS, jadi saya tidak mengambil berat tentang isu merentas penyemak imbas.)
P粉1388714852023-10-09 15:14:40
Bagaimana pula dengan menulis satu ayat setiap baris menggunakan JS ES10 / ES2019?
Gunakan Object.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);
Dalam ES7/ES2016, anda tidak boleh menggunakan Objects.fromEntries
,但您可以使用Object.assign
dengan pengendali sebaran dan nama kunci yang dikiraSintaks:
let newObj = Object.assign({}, ...Object.entries(obj).map(([k, v]) => ({[k]: v * v})));
ES6 / ES2015 tidak dibenarkan Object.entries
,但您可以使用 Object.keys
ditukar kepada:
let newObj = Object.assign({}, ...Object.keys(obj).map(k => ({[k]: obj[k] * obj[k]})));
ES6 juga memperkenalkan gelung for...of
, membenarkan gaya yang lebih penting:
let newObj = {} for (let [k, v] of Object.entries(obj)) { newObj[k] = v * v; }
Anda juga boleh menggunakan reduce untuk ini:
let newObj = Object.entries(obj).reduce((p, [k, v]) => ({ ...p, [k]: v * v }), {});
Dalam beberapa kes yang jarang berlaku, anda mungkin perlu memetakan objek kelas yang ada dalam rantai prototaipnya. Dalam kes ini, Object.keys()
Object.keys()
和 Object.entries()
dan Object.entry()
Jika anda perlu memetakan sifat warisan for (key in myObj) {...}
, anda boleh menggunakan
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 elakkan warisan. :-)🎜
P粉8264299072023-10-09 10:42:04
Tidak sampai Object
对象的本机 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 }