Underscore的_.indexBy()的ES6版本

时间:2018-08-14 11:33:32

标签: ecmascript-6 underscore.js

下划线具有整洁的函数indexBy,用于将数组映射到特定键上。从文档中:

  

_。indexBy(列表,迭代器,上下文)

     

给出一个列表,并为列表中的每个元素(或属性名称)返回一个键的iteratee函数,返回一个具有每个项目索引的对象。就像groupBy一样,但是当您知道自己的键是唯一的时。

使用示例:

var stooges = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];
_.indexBy(stooges, 'age');
  => {
    "40": {name: 'moe', age: 40},
    "50": {name: 'larry', age: 50},
    "60": {name: 'curly', age: 60}
  }

在没有库的纯ES6中怎么写?

1 个答案:

答案 0 :(得分:1)

此函数使用_.indexByiteratee实现context的完整定义:

function indexBy(list, iteratee, context) {
    return list.reduce((map, obj) => {
        const key = typeof iteratee === 'string' ? obj[iteratee] : iteratee.call(context, obj);
        map[key] = obj;
        return map;
    }, {});
}