I'm mencari alternatif versi untuk Objek.nilai-nilai()
fungsi.
Sebagai yang dijelaskan di sini fungsi ini tidak didukung di Internet Explorer.
Ketika menjalankan kode contoh berikut:
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
Ia bekerja dengan baik di Firefox dan Chrome, tapi melempar kesalahan berikut di IE11:
Objek doesn't mendukung properti atau metode "nilai"
Di sini anda dapat mengujinya: [Biola][2].
Jadi, apa yang akan menjadi perbaikan cepat?
Anda bisa mendapatkan sejumlah tombol dengan Objek.kunci-kunci()
dan kemudian menggunakan peta()
untuk mendapatkan nilai.
var obj = { foo: 'bar', baz: 42 };
var values = Object.keys(obj).map(function(e) {
return obj[e]
})
console.log(values)
Dengan ES6 anda dapat menulis ini dalam satu baris menggunakan panah-fungsi.
var values = Object.keys(obj).map(e => obj[e])
Objek.nilai-nilai() adalah bagian dari ES8(juni 2017) spesifikasi. Menggunakan Cordova, saya menyadari Android 5.0 Webview doesn't mendukungnya. Jadi, saya lakukan hal berikut, menciptakan polyfill fungsi hanya jika fitur ini tidak didukung:
if (!Object.values) Object.values = o=>Object.keys(o).map(k=>o[k]);
Karena Objek adalah (tidak) baru-baru ini implementasi, jika anda ingin dukungan semua browser (ALIAS IE8 dan di bawah), maka anda perlu membuat fungsi sendiri:
function objectValues(obj) {
var res = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
res.push(obj[i]);
}
}
return res;
}
PS: Hanya melihat ecmascript-6
tag. Btw aku terus jawaban ini di sini, hanya dalam kasus seseorang yang membutuhkannya.
Untuk orang-orang yang menggunakan UnderscoreJS, anda bisa mendapatkan nilai objek dengan menggunakan _.nilai-nilai
:
var obj = { foo: 'bar', baz: 42 };
console.log(_.values(obj)); // ['bar', 42]
var x = {Name: 'John', Age: 30, City: 'Bangalore'};
Object.prototype.values = function(obj) {
var res = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
res.push(obj[i]);
}
}
return res;
};
document.getElementById("tag").innerHTML = Object.values(x)
<p id="tag"></p>
Aku tahu itu adalah topik lama. Aku sedang bermain di sekitar dan hanya ingin menambah implementasi. Itu hanya versi peta dengan peta itu sendiri dilaksanakan dengan mengurangi :
let obj = { foo: 'bar', baz: 42 };
const valueArray = Object.keys(obj).reduce((acc, key) => {
acc.push(obj[key]);
return acc;
}, []);
console.log(valueArray);
Ia melakukan pekerjaan tetapi memiliki sesuatu yang mengganggu saya. Peredam fungsi menggunakan obj dan obj tidak disuntikkan di dalamnya. Kita harus menghindari variabel global dalam fungsi dan fungsi yang lebih dapat diuji. Jadi saya lebih suka versi ini dengan fungsi peredam helper yang mengambil obj sebagai parameter yang kembali sebenarnya fungsi peredam . Menjadi:
let obj = { foo: 'bar', baz: 42 };
// reducer function helper take obj and return the actual reducer function
let reducerFuncHelper= obj => (acc, key) => {
acc.push(obj[key]);
return acc;
}
//much better
const valueArray = Object.keys(obj).reduce(reducerFuncHelper(obj), []);
console.log(valueArray);
Seperti yang saya didn't menemukan jawaban untuk kebutuhan saya:
var obj = { foo: 'bar', baz: 42 };
console.log(obj[Object.keys(obj)[0]]) // bar
console.log(obj[Object.keys(obj)[1]]) // 42
Menggunakan kemungkinan objek untuk alamat mereka per literal.