首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将对象数组转换为散列映射,通过对象的属性值进行索引

将对象数组转换为散列映射,通过对象的属性值进行索引
EN

Stack Overflow用户
提问于 2014-10-09 03:33:48
回答 20查看 447.1K关注 0票数 443

用例

用例是根据提供的字符串或函数将对象数组转换为散列映射,以计算并用作散列映射中的键,并将值用作对象本身。使用这种方法的一种常见情况是将对象数组转换为对象的散列映射。

代码

以下是JavaScript中的一小段代码,用于将对象数组转换为散列映射,该映射由对象的属性值索引。您可以提供一个函数来动态(运行时)评估hash map的键值。

代码语言:javascript
复制
function isFunction(func) {
    return Object.prototype.toString.call(func) === '[object Function]';
}

/**
 * This function converts an array to hash map
 * @param {String | function} key describes the key to be evaluated in each object to use as key for hashmap
 * @returns Object
 * @Example 
 *      [{id:123, name:'naveen'}, {id:345, name:"kumar"}].toHashMap("id")
 *      Returns :- Object {123: Object, 345: Object}
 *
 *      [{id:123, name:'naveen'}, {id:345, name:"kumar"}].toHashMap(function(obj){return obj.id+1})
 *      Returns :- Object {124: Object, 346: Object}
 */
Array.prototype.toHashMap = function(key) {
    var _hashMap = {}, getKey = isFunction(key)?key: function(_obj){return _obj[key];};
    this.forEach(function (obj){
        _hashMap[getKey(obj)] = obj;
    });
    return _hashMap;
};

你可以在这里找到要点:Converts Array of Objects to HashMap

EN

Stack Overflow用户

发布于 2018-11-06 05:46:21

这就是我在TypeScript中做的事情,我有一个小的utils库,我在那里放了这样的东西

代码语言:javascript
复制
export const arrayToHash = (array: any[], id: string = 'id') => 
         array.reduce((obj, item) =>  (obj[item[id]] = item , obj), {})

用法:

代码语言:javascript
复制
const hash = arrayToHash([{id:1,data:'data'},{id:2,data:'data'}])

或者如果你有一个标识符而不是'id‘

代码语言:javascript
复制
const hash = arrayToHash([{key:1,data:'data'},{key:2,data:'data'}], 'key')
票数 5
EN
查看全部 20 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26264956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档