Ответ 1
var dataArray = [];
for(var o in dataObject) {
dataArray.push(dataObject[o]);
}
С учетом объекта JavaScript:
var dataObject = {
object1: {id: 1, name: "Fred"},
object2: {id: 2, name: "Wilma"},
object3: {id: 3, name: "Pebbles"}
};
Как эффективно извлекать внутренние объекты в массив? Мне не нужно поддерживать дескриптор идентификаторов объекта [n].
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]});
Версия ES6:
var dataArray = Object.keys(dataObject).map(val => dataObject[val]);
Используя underscore:
var dataArray = _.values(dataObject);
С помощью jQuery вы можете сделать это так:
var dataArray = $.map(dataObject,function(v){
return v;
});
ES2017 с использованием 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)
Предполагая, что ваш dataObject определен так, как вы указали, вы делаете это:
var dataArray = [];
for (var key in dataObject)
dataArray.push(dataObject[key]);
И в итоге у меня есть dataArray, заполненный внутренними объектами.
Используя принятый ответ и зная, что Object.values () является предложенный в Проект ECMAScript 2017, вы можете расширить Object с помощью метода:
if(Object.values == null) {
Object.values = function(obj) {
var arr, o;
arr = new Array();
for(o in obj) { arr.push(obj[o]); }
return arr;
}
}
[Получается, что мой ответ похож на @Anonymous, но я держу свой ответ здесь, так как он объясняет, как я получил свой ответ].
Исходный объект имеет три свойства (т.е. 3 клавиши и 3 значения). Это предполагает, что мы должны использовать Object.keys()
, чтобы преобразовать его в массив с 3 значениями.
var dataArray = Object.keys(dataObject);
// Gives: ["object1", "object2", "object3" ]
Теперь у нас есть 3 значения, но не 3 значения, которые мы получаем после. Итак, это предполагает, что мы должны использовать 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"}]
Возможно немного подробный, но надежный и быстрый
var result = [];
var keys = Object.keys(myObject);
for (var i = 0, len = keys.length; i < len; i++) {
result.push(myObject[keys[i]]);
}
Метод Object.values() теперь поддерживается. Это даст вам массив значений объекта.
Object.values(dataObject)
См: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values
Если вы используете d3. вы можете сделать d3.values(dataObject)
, который даст