因此下划线中的_.map()
函数不会返回一个对象,但它需要它们。它有什么办法可以返回完全相同的对象吗?
var _ = require("underscore");
var cars = {
"mom": {
"miles": "6",
"gas": "4"
},
"dad": {
"miles": "6",
"gas": "4"
}
}
var regurgitate_cars = _.map(cars, function(value, key){
return value;
});
/*
[ { miles: '6', gas: '4' }, { miles: '6', gas: '4' } ]
*/
var regurgitate_cars = _.map(cars, function(value, key){
var transfer = {};
transfer[key] = value;
return transfer;
});
/*
[ { mom: { miles: '6', gas: '4' } },
{ dad: { miles: '6', gas: '4' } } ]
*/
答案 0 :(得分:7)
您可以使用_.object()
将其重新转换为对象。
var regurgitate_cars = _.object(
_.map(cars, function(value, key){
return [key, value];
})
);
至于直接使用_.map
执行此操作,您必须重写地图才能执行此操作。
答案 1 :(得分:7)
_.map()
将始终返回一个数组,但您可以使用_.reduce()
获取行为:
var regurgitateCars = _.reduce(cars, function(memo, value, key) {
memo[key] = value;
return memo;
}, cars);
注意,这将修改并返回原始对象,如果你想要一个副本,你可以提供一个空对象作为第三个参数,它将在第一次调用匿名函数时用作memo
参数:
var regurgitateCars = _.reduce(cars, function(memo, value, key) {
memo[key] = value;
return memo;
}, {});
答案 2 :(得分:1)
map
会返回一个array
,所以你无法通过编写自己的对象来返回原始对象。见documentation:
通过映射列表中的每个值来生成新的值数组 转换函数(迭代器)。如果存在本机地图方法, 它将被替代使用。如果list是JavaScript对象,那么迭代器就是 参数将是(值,键,列表)。
答案 3 :(得分:0)
无法使用当前的map实现返回对象。 It's been suggested该库添加了.mapValues()
函数,可以执行您喜欢的操作。以下是将其添加到代码中的方法:
_.mixin({
mapValues: function (input, mapper) {
return _.reduce(input, function (obj, v, k) {
obj[k] = mapper(v, k, input);
}, {});
}
});
现在您可以使用mapValues返回一个新对象:
var regurgitate_cars = _.mapValues(cars, function(value, key){
return value;
});