Javascript 我是否可以使用_lodash来简化使用.reduce对对象数组进行寻址的方式?

Javascript 我是否可以使用_lodash来简化使用.reduce对对象数组进行寻址的方式?,javascript,lodash,Javascript,Lodash,我试图做一些类似于这个问题的事情: 我试图使用答案中建议的函数,但它给了我一个错误,即id未定义: var userMap = userdata1.reduce(function(rv, v) { rv[v[id]] = v; return rv; }, {}); 用户提到lodash与.reduce类似 我能用lodash做同样的事情吗?那就是改变: var userdata1 = [ {"id":"527ddbd5-14d3-4fb9-a7ae-374e66f635d4","n

我试图做一些类似于这个问题的事情:

我试图使用答案中建议的函数,但它给了我一个错误,即id未定义:

var userMap = userdata1.reduce(function(rv, v) {
  rv[v[id]] = v;
  return rv;
}, {});
用户提到lodash与.reduce类似

我能用lodash做同样的事情吗?那就是改变:

var userdata1 = 
[
{"id":"527ddbd5-14d3-4fb9-a7ae-374e66f635d4","name":"xxx"},
{"id":"e87c05bc-8305-45d0-ba07-3dd24438ba8b","name":"yyy"}
]
在某个对象中,我可以找到如下名称:

var theName = userdata1["527ddbd5-14d3-4fb9-a7ae-374e66f635d4"]

以下是一个完整的解决方案:

var _ = require("lodash");

var userdata1 =
[
{"id":"527ddbd5-14d3-4fb9-a7ae-374e66f635d4","name":"xxx"},
{"id":"e87c05bc-8305-45d0-ba07-3dd24438ba8b","name":"yyy"}
];

var userMap = _.reduce(userdata1, function(rv, v) {
  rv[v.id] = v.name;
  return rv;
}, {});

console.log(userMap["527ddbd5-14d3-4fb9-a7ae-374e66f635d4"]);
console.log(userMap["e87c05bc-8305-45d0-ba07-3dd24438ba8b"]);
一些注意事项:

  • 我已经按照要求加入了lodash,但您可以使用
    userdata1.reduce
    来实现

  • 在传递给
    reduce
    的函数中,您正在执行
    rv[v[id]]
    。这就是为什么您得到了未定义的
    。代码没有从
    v
    中查找名为
    “id”
    的字段,它试图解析当前范围中名为
    id
    的符号,但未找到使用此名称定义的任何内容

  • anynymous函数的唯一其他修改是将
    v.name
    关联到结果对象,而不是
    v
    ,以便在访问
    userMap
    对象时,根据问题中的要求,您可以获得名称

  • 根据您的使用模式,在调用
    reduce
    时最好使用
    Object.create(null)
    而不是
    {}
    。哪一个更好取决于上下文

  • 可能的副本;我已经回答了你的问题,这样你眼前的问题就解决了,但实际上,一旦
    rv[v[id]]
    bug解决了,这个问题的答案就可以从另一个问题的答案中简单地推导出来。