Probabilmente il modo più conciso di ottenere una matrice dei valori contenuti all'interno di un oggetto è quello di utilizzare Object.keys
e Array.prototype.map
:
obj = {
a: 1,
b: 2,
c: 3
};
values = Object.keys(obj).map(function (key) {
return obj[key];
});
Altrimenti non c'è modo standardizzato di ottenere un array di valori di un oggetto.
Per iterazione, ES6 introduce un loop for..of
che scorrere i valori di un oggetto:
continuato dall'alto:
for (value of obj) {
console.log(value); //1, 2, 3
}
ES7 è previsto per introdurre array comprehensions, generando così la matrice valori potrebbe essere scritta come:
continuato dall'alto:
values = [for (x of Object.keys(obj)) obj[x]];
Se stai già utilizzando sottolineatura, è possibile utilizzare il metodo _.values
:
continuato dall'alto:
_.values(obj); //[1, 2, 3]
Se si desidera solo un'implementazione efficace per questa funzione di utilità, il lodash source è:
linee lodash.js V2.4.1 2891-2914
/**
* Creates an array composed of the own enumerable property values of `object`.
*
* @static
* @memberOf _
* @category Objects
* @param {Object} object The object to inspect.
* @returns {Array} Returns an array of property values.
* @example
*
* _.values({ 'one': 1, 'two': 2, 'three': 3 });
* // => [1, 2, 3] (property order is not guaranteed across environments)
*/
function values(object) {
var index = -1,
props = keys(object),
length = props.length,
result = Array(length);
while (++index < length) {
result[index] = object[props[index]];
}
return result;
}
'for..in' sembra più adatto per gli oggetti. – Shomz
se si utilizza underscore - esiste una funzione 'values'. –
Non in semplice JavaScript, ma è semplice da realizzare. – PHPglue