JavaScript 对象,属性变成对象数组 求解。

2016-02-22 09:49:31 +08:00
 anonymoustian

现在有一个对象名为 map 有属性 a, b, c
表示为:
Object {a: 1, b: 2, c: 3}

现在想把这个对象变为对象数组,形式如下:

[{name : 'a', value : 1}, {name : 'b', value : 2}, {name : 'c', value : 3}]

请问应该怎么做呢?

另外能不能麻烦各位推荐一下 JavaScript 的优秀的入门 /参考书籍?谢谢了

3357 次点击
所在节点    JavaScript
20 条回复
whahuzhihao
2016-02-22 09:59:09 +08:00
手动遍历可以么
```
var o = {a:1,b:2,c:3};
var no = [];
for(var k in o)
{
no.push({name:k,value:o[k]});
}
console.log(no);
```
oct16
2016-02-22 10:03:17 +08:00
var arr = [];
var obj = {a:1,b:2,c:3};
var temp;
for(var key in obj){
temp = {};
temp.name = key;
temp.value = obj[key];
arr.push(temp);
}
console.log(arr)
hienchu
2016-02-22 10:04:52 +08:00
jarlyyn
2016-02-22 10:11:18 +08:00
楼主有没有听说过 Lodash/underscore ?
jarlyyn
2016-02-22 10:22:20 +08:00
好吧,仔细看了下,楼主要的格式和 toparis 的有点区别

https://lodash.com/docs#toPairs
FrankFang128
2016-02-22 10:26:55 +08:00
无法保证顺序
otakustay
2016-02-22 11:45:56 +08:00
Object.entries(o).map(([name, value]) => ({name, value}));
ChefIsAwesome
2016-02-22 12:03:56 +08:00
遍历一下不就行了,不知道楼主纠结在哪
ncwhale
2016-02-22 13:12:46 +08:00
{name:k, value: v} for k,v of map
hanai
2016-02-22 13:18:06 +08:00
Object.keys(obj).map(key => {name: key, value: obj[key]})
exoticknight
2016-02-22 13:19:35 +08:00
7 楼 es2015 正解
mmzer
2016-02-22 14:12:50 +08:00
var arr=[],i = 0;
var obj = {a:1,b:2,c:3}
for(var k in obj){
if(obj[k]){
arr[i++] = function(){
return {
name:k,
value:obj[k]
}
} ();
}
}
console.log(arr);
otakustay
2016-02-22 14:49:39 +08:00
@exoticknight 还真不是 2015 的, entries 是 2016 的
sinalvee
2016-02-22 15:47:47 +08:00
yangxiongguo
2016-02-22 15:52:51 +08:00
7 楼跟 10 楼都是手撸的吗,都报错了。
klesh
2016-02-22 18:32:22 +08:00
lodash:
var pairs = _.map(o, function(v, k) {
return { name: k, value: v };
});
exoticknight
2016-02-22 19:14:44 +08:00
@otakustay 果然是,是我技术太渣了= =
exoticknight
2016-02-22 19:15:03 +08:00
@yangxiongguo 基本没有浏览器支持 es6/7 ……
dustinth
2016-02-22 20:38:17 +08:00
underscore 或者 lodash 应该成为标配...自从用了就离不开了.
magicdawn
2016-02-23 09:45:39 +08:00
lodash

```js
var obj = {a: 1, b: 2, c: 3};
_.map(obj, (v,k) => {
return {
name: k,
value: v
};
});
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/258130

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX