我有一个名为territory的数组,其中包含以下内容
我想在其中创建一个hashmap 在
键是id [每个对象的id属性]
和
值是整个对象
关于它的任何帮助/指针?
三江源
答案 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的存储对象