Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于属性将数组转换为地图的快捷方式_Javascript_Node.js - Fatal编程技术网

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)