使用下划线对数组进行分类的最快方法是什么.js.
What is the fastest way to categorize arrays using underscore.js?
对于这样的 json 对象,
list=[
{name:"hello",
category:"verb"},
{name:"world",
category:"noun"}
];
使用下划线对数组进行分类以获得此结果的最快方法是什么:
category=[
{id:"verb",
list:[
{name:"hello",
category:"verb"}
]},
{id:"noun",
list:[
{name:"world",
category:"noun"}
]}
];
它应该是某种链式地图缩减...当然,我可以使用_.filter
(但那会很慢)或使用for
循环轻松完成此操作。
好的,我找到了:
groupBy _.groupBy(list, iterator)
将集合拆分为多个集,按通过迭代器运行每个值的结果进行分组。如果迭代器是字符串而不是函数,则按迭代器对每个值命名的属性进行分组。
_.groupBy([1.3, 2.1, 2.4], function(num){ return Math.floor(num); });
=> {1: [1.3], 2: [2.1, 2.4]}
_.groupBy(['one', 'two', 'three'], 'length');
=> {3: ["one", "two"], 5: ["three"]}
所以我用这个做了(我已经有一个列表):
var listofwords=_.groupBy(doc.words, function(word){
return word.category;
});
_.each(doc.lists,function(list){
list.words=listofwords[list.name];
});
我认为,这应该更快
list = [
{name:"hello", category:"verb"},
{name:"world", category:"noun"}
];
var addresses = {};
var catList = _.reduce(list, function(cat, item) {
var address = addresses[item.category];
if(typeof address == 'undefined') {
addresses[item.category] = address = cat.length;
cat.push({id: item.category, list: []});
}
cat[address].list.push(item);
return cat;
}, []);
相关文章:
- 有没有一种方法可以防止img get请求使用css或js发生
- 有条件更新d3.js力图中节点的最佳方法
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 有没有一种方法可以获得three.js的最小/lite版本
- Underscore.js某些对象的所有方法的总和
- node.js是否具有'match()'方法如果是,语法是什么
- 当数据库中的某些内容发生变化时调用HTTP方法Meteor.js
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 从React调用方法.JS州
- 从方法js中的函数获取对象属性
- 是否可以在 Vue 中嵌套方法.js以便对相关方法进行分组
- 主干 - 从我的原型视图调用方法.js
- $(这个).方法(js 或 jquery)
- 如何在噩梦中运行多种评估方法.js
- 如何从骨干中的集合调用模型的方法.js
- 如何在传单中使用 .off() 事件方法.js
- 检查这个的好方法和干净的方法?(JS+HTML)
- 使用爆米花迭代提示方法.js