85 votes

Version Alternative de l'Objet.les valeurs de()

Je suis à la recherche d'une version alternative de l' Object.values() fonction.
Comme décrit ici, la fonction n'est pas prise en charge dans Internet Explorer.

Lors de l'exécution de l'exemple de code suivant:

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

Il fonctionne dans les deux, Firefox et Chrome, mais jette l'erreur suivante dans IE11:

L'objet ne prend pas en charge la propriété ou de la méthode de "valeurs"

Ici, vous pouvez tester: le Violon.

Donc, ce serait une solution rapide?

184voto

Nenad Vracar Points 17412

Vous pouvez obtenir la matrice de touches avec Object.keys() , puis utiliser map() d'obtenir des valeurs.

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

console.log(values)

Avec ES6 vous pouvez écrire une seule ligne à l'aide de la flèche-fonctions.

var values = Object.keys(obj).map(e => obj[e])

24voto

Chong Lip Phang Points 2558

Objet.les valeurs de() est une partie de l'ES8(juin 2017) de la spécification. À l'aide de Cordova, j'ai réalisé Android 5.0 Webview ne le supporte pas. Donc, je n'ai la suite, la création de la polyfill fonction uniquement si la fonctionnalité n'est pas pris en charge:

if (!Object.values) Object.values = o=>Object.keys(o).map(k=>o[k]);

18voto

Puisque l'Objet est un (pas si) mise en œuvre est récente, si vous souhaitez prendre en charge tous les navigateurs (AKA IE8 et ci-dessous), alors vous avez besoin pour créer votre propre fonction:

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

PS: Viens de remarquer ecmascript-6 balise. Btw je garde cette réponse ici, juste au cas où quelqu'un en a besoin.

7voto

Alex Pánek Points 370

Vous pouvez utiliser un polyfill:

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 }));

3voto

Aamin Khan Points 376

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>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X