将数组转换为Hashmap(键值对)javascript

时间:2015-03-03 15:12:09

标签: javascript arrays hashmap

我有一个名为territory的数组,其中包含以下内容

enter image description here

我想在其中创建一个hashmap 在

键是id [每个对象的id属性]

值是整个对象

关于它的任何帮助/指针?

三江源

2 个答案:

答案 0 :(得分:5)

您只需迭代数组并将每个元素指定为对象中的属性:

var hash = {};
var data = [...];
data.forEach(function (it) { hash[it.id] = it; });

如果您有权访问lodash库,可以使用indexBy一次转换整个数组:

var data = [...];
var hash = _.indexBy(data, 'id');

下划线库还有一个indexBy方法,其行为方式相同。

答案 1 :(得分:2)

嗨,你可以这样做,它会起作用:

var hashmap = {};

territory.forEach(function(element) {

    if(hashmap[element.id]!==null && hashmap[element.id]!=undefined){
       if(!Array.isArray(hashmap[element.id])){ 
           var tempObj = hashmap[element.id];

           // don't forget to json.stringify your object if you 
           // want to  serialise your hashmap for external use

           hashmap[element.id] = [tempObj];
       }

       hashmap[element.id].push(element);

    }
    else{
        // if you want to serialise your hashmap for external use
        hashmap[element.id] = JSON.stringify(element);
        // if not, you could just do without JSON.stringify
        hashmap[element.id] = element;
    }

});

console.log(hashmap);

您可以查看有关foreach

的更多信息的mozilla文档

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

编辑:我更新了代码以避免(脏)id重复和共享相同ID的存储对象