Javascript下划线数组到对象
Javascript underscore array to object
有没有一种简单/干净的方法使用Undercore来打开这个
[ { id: 'medium', votes: 7 },
{ id: 'low', votes: 9 },
{ id: 'high', votes: 5 } ]
进入
{ 'low' : 9,
'medium' : 7,
'high' : 5 }
您可以考虑_.indexBy(…(
var data = [{
id: 1,
name: 'Jon Doe',
birthdate: '1/1/1991',
height: '5 11'
}, {
id: 2,
name: 'Jane Smith',
birthdate: '1/1/1981',
height: '5 6'
}, {
id: 3,
name: 'Rockin Joe',
birthdate: '4/4/1994',
height: '6 1'
}, {
id: 4,
name: 'Jane Blane',
birthdate: '1/1/1971',
height: '5 9'
}, ];
var transformed = _.indexBy(data, 'id');
这是一把小提琴:https://jsfiddle.net/4vyLtcrf/3/
更新:在Lodash 4.0.1中,方法_.indexBy已重命名为_.keyBy
var data = [ { id: 'medium', votes: 7 },
{ id: 'low', votes: 9 },
{ id: 'high', votes: 5 } ];
你可以用_.map
、_.values
和_.object
来完成,就像这个一样
console.log(_.object(_.map(data, _.values)));
# { medium: 7, low: 9, high: 5 }
解释
我们使用map
函数将values
函数(它获得给定对象的所有值(应用于data
的所有元素,这将给出
# [ [ 'medium', 7 ], [ 'low', 9 ], [ 'high', 5 ] ]
然后我们使用object
函数将其转换为一个对象。
下面是香草js:
var result = {};
[ { id: 'medium', votes: 7 },
{ id: 'low', votes: 9 },
{ id: 'high', votes: 5 } ].forEach(function(obj) {
result[obj.id] = obj.votes;
});
console.log(result);
使用我更简单:each
:
var t = {};
_.each(x, function(e){
t[e.id] = e.votes;
});
//--> {medium: 7, low: 9, high: 5}
下划线最有力的方法是reduce。你几乎可以用它做任何事情。更大的好处是你只需迭代一次集合!
var array = [
{ id: 'medium', votes: 7 },
{ id: 'low', votes: 9 },
{ id: 'high', votes: 5 }
];
var object = _.reduce(array, function(_object, item) {
_object[item.id] = item.votes;
return _object;
}, {});
运行后,对象将是:
{
medium:7,
low:9,
high:5
}
使用indexBy
_.indexBy([
{ id: 'medium', votes: 7 },
{ id: 'low', votes: 9 },
{ id: 'high', votes: 5 }
], 'id');
我知道这是一篇旧文章,但您可以使用_.reduce
以一种干净的方式进行转换
var data = [
{ id: 'medium', votes: 7 },
{ id: 'low', votes: 9 },
{ id: 'high', votes: 5 }
]
var output = _.reduce(data, function(memo, entry) {
memo[entry.id] = entry.votes;
return memo;
}, {});
console.log(output);
您可以使用本机JS Array.reduce
const myArray = [ { id: 'medium', votes: 7 },
{ id: 'low', votes: 9 },
{ id: 'high', votes: 5 } ]
const myObject = myArray.reduce((obj, item)=>{
o[item.id] = item.votes
return o
}, {})
有关更多详细信息,请查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在Javascript中转换对象数组
- 在JavaScript中通过索引从对象数组中获取值
- Backbone虹吸以获取对象数组
- 如何在DataTables 2.1中迭代对象数组
- Javascript-根据赋值顺序,按键合并对象数组
- 将事件附加到对象/数组
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 在对象数组中查找多个值的d3范围
- Undercore.js获取对象数组中键对象的值
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何通过json对象数组为嵌套对象赋值
- 如何循环通过2个对象数组并通过匹配id进行合并
- 为对象数组创建列表项
- 如何使用javascript合并两个对象数组
- JSON到对象数组,并向每个对象添加项
- JavaScript:从对象数组中获取唯一值及其计数
- 按不同项目对对象数组进行排序