Mat*_*ris 60 javascript arrays json
给定一个JavaScript对象:
var dataObject = {
object1: {id: 1, name: "Fred"},
object2: {id: 2, name: "Wilma"},
object3: {id: 3, name: "Pebbles"}
};
Run Code Online (Sandbox Code Playgroud)
如何有效地将内部对象提取到数组中? 我不需要维护对象[n] ID 的句柄.
var dataArray = [
{id: 1, name: "Fred"},
{id: 2, name: "Wilma"},
{id: 3, name: "Pebbles"}]
Run Code Online (Sandbox Code Playgroud)
小智 71
var dataArray = Object.keys(dataObject).map(function(k){return dataObject[k]});
Run Code Online (Sandbox Code Playgroud)
Mur*_* VP 64
var dataArray = [];
for(var o in dataObject) {
dataArray.push(dataObject[o]);
}
Run Code Online (Sandbox Code Playgroud)
Tho*_*ran 25
ES6版本:
var dataArray = Object.keys(dataObject).map(val => dataObject[val]);
Run Code Online (Sandbox Code Playgroud)
rzy*_*mek 23
使用下划线:
var dataArray = _.values(dataObject);
Run Code Online (Sandbox Code Playgroud)
Moh*_*dil 14
使用jQuery,你可以这样做 -
var dataArray = $.map(dataObject,function(v){
return v;
});
Run Code Online (Sandbox Code Playgroud)
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)Run Code Online (Sandbox Code Playgroud)
假设您的dataObject是按照您指定的方式定义的,您可以这样做:
var dataArray = [];
for (var key in dataObject)
dataArray.push(dataObject[key]);
Run Code Online (Sandbox Code Playgroud)
并最终使用内部对象填充dataArray.
[编辑和更新我的答案。其他答案似乎与我的几乎重叠,但是,我认为我以前有另一个答案并提供了替代方案]。
我针对这个问题提出了 3 个解决方案,基于:
Objects.keys() 解决方案:
let keys = Object.keys(dataObject); // ["object1", "object2", "object3" ];
let keysToResult = keys.map( e => dataObject[e] ); // [{"id":1,"name":"Fred"},{"id":2,"name":"Wilma"},{"id":3,"name":"Pebbles"}]
Run Code Online (Sandbox Code Playgroud)
Object.values 解决方案:
let values = Object.values(dataObject); // [{"id":1,"name":"Fred"},{"id":2,"name":"Wilma"},{"id":3,"name":"Pebbles"}]
Run Code Online (Sandbox Code Playgroud)
Object.entries 解决方案:
let entries = Object.entries(dataObject); // [["object1",{"id":1,"name":"Fred"}],["object2",{"id":2,"name":Wilma"}],["object3",{"id":3,"name":"Pebbles"}]]
let entriesToResult = entries.map( ([k,v]) => v ); [{"id":1,"name":"Fred"},{"id":2,"name":"Wilma"},{"id":3,"name":"Pebbles"}]
Run Code Online (Sandbox Code Playgroud)
这三种解决方案都有自己的特点。
Object.keys() 返回一个结果不足的数组。因此,我们使用 Array.prototype.map 来填充数组中的每个值以接近我们想要的值。通常,我们可以将 Object.keys() 与 map 结合视为一种机制,可以根据我们的需要自定义结果列表。
Object.values() 很有趣,因为它丢弃键并且只返回结果。事实上,对于这个问题,这是完美的,因为答案不需要进一步处理。
Object.entries() 返回的比我们想要的更多,因为它同时返回键和值。我们需要使用 map 来自定义我们的结果。事实上,我们需要剪掉多余的信息。
Object.keys()、Object.values() 和 Object.entries() 都是非常有用的函数,这就是为什么我想展示所有 3 个作为这个问题的解决方案。根据您的特定用例,您可能会找到更适合解决问题的方法。
使用接受的答案并知道在ECMAScript 2017草案中提出了Object.values(),您可以使用方法扩展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;
}
}
Run Code Online (Sandbox Code Playgroud)
也许有点冗长,但是强大且快速
var result = [];
var keys = Object.keys(myObject);
for (var i = 0, len = keys.length; i < len; i++) {
result.push(myObject[keys[i]]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88616 次 |
| 最近记录: |