Javascript 我是否可以使用_lodash来简化使用.reduce对对象数组进行寻址的方式?
我试图做一些类似于这个问题的事情: 我试图使用答案中建议的函数,但它给了我一个错误,即id未定义: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
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"]);
一些注意事项:
userdata1.reduce
来实现reduce
的函数中,您正在执行rv[v[id]]
。这就是为什么您得到了未定义的
。代码没有从v
中查找名为“id”
的字段,它试图解析当前范围中名为id
的符号,但未找到使用此名称定义的任何内容v.name
关联到结果对象,而不是v
,以便在访问userMap
对象时,根据问题中的要求,您可以获得名称reduce
时最好使用Object.create(null)
而不是{}
。哪一个更好取决于上下文rv[v[id]]
bug解决了,这个问题的答案就可以从另一个问题的答案中简单地推导出来。