オブジェクト配列を、オブジェクトの属性値でインデックス付けされたハッシュマップに変換する 質問する

オブジェクト配列を、オブジェクトの属性値でインデックス付けされたハッシュマップに変換する 質問する

使用事例

使用例は、評価するために提供された文字列または関数に基づいてオブジェクトの配列をハッシュ マップに変換し、ハッシュ マップ内のキーとして、またオブジェクト自体として値として使用することです。これを使用する一般的な例は、オブジェクトの配列をオブジェクトのハッシュ マップに変換することです。

コード

以下は、オブジェクトの配列をオブジェクトの属性値でインデックス付けされたハッシュ マップに変換する 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;
};

要点はここにあります:オブジェクトの配列をハッシュマップに変換します

ベストアンサー1

これはかなり簡単なことですArray.prototype.reduce:

var arr = [
    { key: 'foo', val: 'bar' },
    { key: 'hello', val: 'world' }
];

var result = arr.reduce(function(map, obj) {
    map[obj.key] = obj.val;
    return map;
}, {});

console.log(result);
// { foo:'bar', hello:'world' }

注: Array.prototype.reduce() IE9+ なので、古いブラウザをサポートする必要がある場合は、ポリフィルする必要があります。

おすすめ記事