Object.values ​​() uchun muqobil versiya

Object.values ​​() funktsiyasi uchun muqobil versiyani qidiraman bu yerda tavsiflangan kabi funksiyalar Internet Explorer-da qo'llab-quvvatlanadi.

Quyidagi misol kodini bajarayotganda:

var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj));//['bar', 42]

Har ikkala Firefox va Chrome da ishlaydi, ammo IE11da quyidagi xatolarni keltiradi:

Ob'ekt mulk yoki usulni "qiymatlar" ni qo'llab-quvvatlamaydi

Bu erda siz uni sinab ko'rishingiz mumkin: Fiddle .

Xo'sh, tezroq tuzatish qanday bo'lar edi?

22

6 javoblar

Keyin Object.keys() tugmachalari qatorini olishingiz va keyin map() dan foydalanishingiz mumkin.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var obj = { foo: 'bar', baz: 42 };
var values = Object.keys(obj).map(function(e) {
  return obj[e]
})

console.log(values)
</div> </div>

ES6 bilan siz o'q funksiyalaridan foydalanib uni bir satrda yozishingiz mumkin.

var values = Object.keys(obj).map(e => obj[e])
64
qo'shib qo'ydi
rahmat! Mening burchak 5 kodim uchun objectValues ​​= Object.values; objectValues ​​= ((obj) => {return Object.keys (obj) .map (e => obj [e ]);));
qo'shib qo'ydi muallif Jeff, manba
champ. siz mening kunimni saqlab qoldingiz!
qo'shib qo'ydi muallif Khaleel, manba
Menga uni urdingiz. :)
qo'shib qo'ydi muallif Alex Pánek, manba
Ko'p rahmat, juda yaxshi ishladi.
qo'shib qo'ydi muallif blueprintChris, manba

Ob'ektni barcha brauzerlarini (Aka IE8 va quyida) qo'llab-quvvatlashni istasangiz, u holda o'z funksiyatingizni yaratishingiz zarur: ( emas, balki ).

function objectValues(obj) {
    var res = [];
    for (var i in obj) {
        if (obj.hasOwnProperty(i)) {
            res.push(obj[i]);
        }
    }
    return res;
}

PS: ecmascript-6 yorlig'ini ko'rgansiz. Bu javobni men bu erda saqlayman, agar kimdir bunga muhtoj bo'lsa.

6
qo'shib qo'ydi

Object.values ​​() - ES8 (iyun 2017) spetsifikatsiyasining bir qismidir. Cordova'dan foydalanib, Android 5.0 veb-versiyasi uni qo'llab-quvvatlamaydi degan tushundim. Shunday qilib, agar men xususiyatni qo'llab-quvvatlamasa, polifillf funksiyasini yaratish uchun quyidagilarni qildim:

if (!Object.values) Object.values = o=>Object.keys(o).map(k=>o[k]);
5
qo'shib qo'ydi

Polifillashdan foydalanishingiz mumkin:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

const valuesPolyfill = function values (object) {
  return Object.keys(object).map(key => object[key]);
};

const values = Object.values || valuesPolyfill;

console.log(values({ a: 1, b: 2, c: 3 }));
</div> </div>
4
qo'shib qo'ydi

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

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)



</div> </div>
2
qo'shib qo'ydi

Bilaman, bu eski mavzu. Men atrofda o'ynardim va faqat boshqa dasturni qo'shishni xohlayman. Bu xarita xarita versiyasi bilan qisqartiriladi:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

let obj = { foo: 'bar', baz: 42 };

const valueArray = Object.keys(obj).reduce((acc, key) => {
  acc.push(obj[key]);
  return acc;
}, []);

console.log(valueArray);
</div> </div>

Bu ishni bajaradi, lekin u meni bezovta qiladigan narsa bor. Redüktör funktsiyasi obj dan foydalanadi va obj AOK qilingan emas edi. Biz funktsiyalar ichida global o'zgaruvchan dan qochishimiz va funktsiyalarimizni testlab olamiz qilishimiz kerak. Shuning uchun objni parametr sifatida haqiqiy redaktor vazifasini ga qaytaradigan reduktor funktsiyasi yordamchisi bilan ushbu versiyani afzal qilaman. Bu shunday bo'ladi:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

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);
</div> </div>
0
qo'shib qo'ydi
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb