Ant*_*ald 16 javascript underscore.js
使用下划线函数groupBy,可以按其元素的某个属性对数组进行分组.结果是一个对象,其键值对如下:group>对应的数组片段.
var words = ['Hey', 'Hii', 'Salut'],
grouped = _.groupBy(words, 'length');
Run Code Online (Sandbox Code Playgroud)
分组看起来像这样:
{
'3': ['Hey', 'Hii'],
'5': ['Salut']
}
Run Code Online (Sandbox Code Playgroud)
这将是一种简单而安全的迭代方法,例如从最高长度开始,然后是下一个最低长度.这有效:
_.each( _.toArray(grouped).reverse(), function(v) {
console.log(v);
} );
Run Code Online (Sandbox Code Playgroud)
但我认为这并不完全正确,因为对象是无序列表,而正确的顺序恰好在这里发生.对此有何评论?
你是对的,你不能依赖对象键排序,你需要强制正确的排序.使用下划线,您可以使用_.sortBy:
_.each(
_.sortBy(
_.toArray(grouped), function (num) {
return num;
}
).reverse(),
function (v) {
console.log(v);
}
);
Run Code Online (Sandbox Code Playgroud)
由于ES6的对象属性遍历顺序,您可以使用Object.values()以下命令直接获取正确顺序的数组:
const words = ['Hombre', 'Muchachu', 'Hey', 'Hii', 'Salut'];
const grouped = _.groupBy(words, 'length');
console.log(JSON.stringify(grouped));
const array = Object.values(grouped).reverse();
console.log(JSON.stringify(array));Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>Run Code Online (Sandbox Code Playgroud)
老答案:
Object.keys(grouped) // get the keys as array
.sort(function(a, b) { return b - a; }) // sort them from highest to lowset
.forEach(function(lengthKey) { // iterate the sorted keys' array
console.log(grouped[lengthKey]); // get the words' arrays by key from grouped
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5145 次 |
| 最近记录: |