Javascript 基于属性将数组转换为地图的快捷方式
在编写Javascript 基于属性将数组转换为地图的快捷方式,javascript,node.js,Javascript,Node.js,在编写nodeJs脚本时,我发现自己必须经常执行以下操作 import _ from 'lodash' let humans = [ {id: 'abc', name: 'Somebody 1'}, {id: 'xyz', name: 'Somebody 2'}]; let abcName = _.find(humans, {id: 'abc'}).name 是否有一个现有函数可用于将humans数组转换为基于id的映射,这样我就可以在不使用lodash的情况下调用,也不必编写自己的代码来转换
nodeJs
脚本时,我发现自己必须经常执行以下操作
import _ from 'lodash'
let humans = [ {id: 'abc', name: 'Somebody 1'}, {id: 'xyz', name: 'Somebody 2'}];
let abcName = _.find(humans, {id: 'abc'}).name
是否有一个现有函数可用于将humans数组转换为基于id的映射,这样我就可以在不使用lodash
的情况下调用,也不必编写自己的代码来转换
let humans = [ {id: 'abc', name: 'Somebody 1'}, {id: 'xyz', name: 'Somebody 2'}];
let humansConvertedToMap = convertToMap(humans, 'id')
let abcName = humansConvertedToMap[id].name?
您可以使用将其映射到具有id属性的哈希映射中
let humansMappedToId = humans.reduce(function(acc, val) {
acc[val.id] = val;
return acc;
}, {});
同样的方法也可以用.reduce
实现,但是.transform
更简单
let humansConvertedToMap = _.transform(humans, function(m, v){
m[v.id] = v;
})
您可以使用将其映射到具有id属性的哈希映射中
let humansMappedToId = humans.reduce(function(acc, val) {
acc[val.id] = val;
return acc;
}, {});
同样的方法也可以用.reduce
实现,但是.transform
更简单
let humansConvertedToMap = _.transform(humans, function(m, v){
m[v.id] = v;
})
这里有一个函数可以为您执行此操作:
const arrayOfObjectsToMapByKey = (arrayOfObjects, key) =>
arrayOfObjects.reduce((map, currentObject) => {
let k = currentObject[key];
if (map[k]) {
throw new Error("Repeated object key. Error thrown to stop overrides.");
}
map[k] = currentObject;
return map;
}, {});
所以你可以做你想做的事:
let humans = [ {id: 'abc', name: 'Somebody 1'}, {id: 'xyz', name: 'Somebody 2'}];
let humansConvertedToMap = arrayOfObjectsToMapByKey(humans, 'id')
let abcName = humansConvertedToMap[id].name;
这里有一个函数可以为您执行此操作:
const arrayOfObjectsToMapByKey = (arrayOfObjects, key) =>
arrayOfObjects.reduce((map, currentObject) => {
let k = currentObject[key];
if (map[k]) {
throw new Error("Repeated object key. Error thrown to stop overrides.");
}
map[k] = currentObject;
return map;
}, {});
所以你可以做你想做的事:
let humans = [ {id: 'abc', name: 'Somebody 1'}, {id: 'xyz', name: 'Somebody 2'}];
let humansConvertedToMap = arrayOfObjectsToMapByKey(humans, 'id')
let abcName = humansConvertedToMap[id].name;
您可以采取一种方法,将键/值对映射到构造函数
let humans=[{id:'abc',name:'someone 1'},{id:'xyz',name:'someone 2'}],
humansMap=newmap(humans.Map(o=>[o.id,o]),
abcName=humansMap.get('abc').name;
console.log(abcName)代码>您可以选择一个并将键/值对映射到构造函数
let humans=[{id:'abc',name:'someone 1'},{id:'xyz',name:'someone 2'}],
humansMap=newmap(humans.Map(o=>[o.id,o]),
abcName=humansMap.get('abc').name;
console.log(abcName)代码>