Étant donné un objet JavaScript:
var dataObject = {
object1: {id: 1, name: "Fred"},
object2: {id: 2, name: "Wilma"},
object3: {id: 3, name: "Pebbles"}
};
Comment puis-je extraire efficacement les objets internes dans un tableau? Je n'ai pas besoin de conserver une poignée sur l'objet [n] ID.
var dataArray = [
{id: 1, name: "Fred"},
{id: 2, name: "Wilma"},
{id: 3, name: "Pebbles"}]
var dataArray = [];
for(var o in dataObject) {
dataArray.Push(dataObject[o]);
}
var dataArray = Object.keys(dataObject).map(function(k){return dataObject[k]});
version ES6:
var dataArray = Object.keys(dataObject).map(val => dataObject[val]);
Utilisation de souligné :
var dataArray = _.values(dataObject);
Avec jQuery, vous pouvez le faire comme ceci -
var dataArray = $.map(dataObject,function(v){
return v;
});
En supposant que votre dataObject est défini comme vous l'avez spécifié, vous procédez comme suit:
var dataArray = [];
for (var key in dataObject)
dataArray.Push(dataObject[key]);
Et finissez par avoir dataArray rempli d'objets internes.
ES2017 utilisant Object.values
:
const dataObject = {
object1: {
id: 1,
name: "Fred"
},
object2: {
id: 2,
name: "Wilma"
},
object3: {
id: 3,
name: "Pebbles"
}
};
const valuesOnly = Object.values(dataObject);
console.log(valuesOnly)
En utilisant la réponse acceptée et en sachant que Object.values () est proposé dans ECMAScript 2017 Draft vous pouvez étendre Object avec la méthode:
if(Object.values == null) {
Object.values = function(obj) {
var arr, o;
arr = new Array();
for(o in obj) { arr.Push(obj[o]); }
return arr;
}
}
[Il s'avère que ma réponse est similaire à @Anonymous, mais je garde ma réponse ici car elle explique comment j'ai obtenu ma réponse].
L'objet d'origine a TROIS propriétés (soit 3 clés et 3 valeurs). Cela suggère que nous devrions utiliser Object.keys()
pour le transformer en un tableau avec 3 valeurs.
var dataArray = Object.keys(dataObject);
// Gives: ["object1", "object2", "object3" ]
Nous avons maintenant 3 valeurs, mais pas les 3 valeurs que nous recherchons. Donc, cela suggère que nous devrions utiliser Array.prototype.map()
.
var dataArray = Object.keys(dataObject).map(function(e) { return dataObject[e]; } );
// Gives: [{"id":1,"name":"Fred"},{"id":2,"name":"Wilma"},{"id":3,"name":"Pebbles"}]
Peut-être un peu bavard, mais robuste et rapide
var result = [];
var keys = Object.keys(myObject);
for (var i = 0, len = keys.length; i < len; i++) {
result.Push(myObject[keys[i]]);
}
La méthode Object.values () est désormais prise en charge. Cela vous donnera un tableau de valeurs d'un objet.
Object.values(dataObject)
Voir: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values