Javascript 从lodash中的map()返回groupBy()对对象数组的结果将导致[object]
我尝试在一个对象数组上创建两个groupBy(基本上我尝试链接两个groupBy) 然而,输出是: [{dog:[[Object]],金鱼:[[Object]},{dog:[[Object] ],类别:[[Object]]}] 如果我在映射中执行console.log(),我将得到想要的结果 我应该使用什么来代替Javascript 从lodash中的map()返回groupBy()对对象数组的结果将导致[object],javascript,lodash,Javascript,Lodash,我尝试在一个对象数组上创建两个groupBy(基本上我尝试链接两个groupBy) 然而,输出是: [{dog:[[Object]],金鱼:[[Object]},{dog:[[Object] ],类别:[[Object]]}] 如果我在映射中执行console.log(),我将得到想要的结果 我应该使用什么来代替lodash.map(),或者我需要在从map返回之前应用一些处理 repl.it链接到代码: 以下是预期回报: { 35: { dog: [ { name: 'barney',
lodash.map()
,或者我需要在从map返回之前应用一些处理
repl.it链接到代码:
以下是预期回报:
{
35: { dog: [ { name: 'barney', age: 42, pet: 'dog' } ],
cat: [ { name: 'barney', age: 42, pet: 'cat' } ] },
42:{ dog: [ { name: 'fred', age: 35, pet: 'dog' } ],
goldfish: [ { name: 'fred', age: 35, pet: 'goldfish' } ] }
}
使用本机javascript和array
reduce
函数可以实现相同的输出。创建一个函数并传递一个参数,对象将根据该参数进行分组。例如,在下面的函数中,您可以传递名称
,年龄
,宠物
,因此对象将按此键名称分组
var字符=[{
'姓名':'巴尼',
年龄:42岁,,
“宠物”:“狗”
},
{
'姓名':'弗雷德',
年龄:35岁,,
“宠物”:“狗”
},
{
'姓名':'巴尼',
年龄:42岁,,
“宠物”:“猫”
},
{
'姓名':'弗雷德',
年龄:35岁,,
“宠物”:“金鱼”
}
];
//创建一个函数,该函数接受将用于
//将对象分组
函数groupBy(键名){
返回字符.reduce(函数(acc、curr、currIndex){
//检查对象是否具有用于对对象进行分组的键
如果(!acc.hasOwnProperty(curr[keyName])){
//如果没有,请创建一个密钥
acc[curr[keyName]]=[];
acc[curr[keyName].推送(curr)
}
//否则就推这个值
acc[curr[keyName].推送(curr);
返回acc;
}, {})
}
//将宠物替换为姓名或年龄以按该键分组结果
console.log(groupBy('pet'))
如果有人在使用console.log
调试此类情况时遇到此问题,它实际上正在工作;只是不知何故,内部包含的对象被缩短为[object]
如果您直接使用console.log访问该对象,它确实可以工作
let lodash = require('lodash');
var characters = [
{ 'name': 'barney', 'age': 42, 'pet': 'dog' },
{ 'name': 'fred', 'age': 35, 'pet': 'dog' },
{ 'name': 'barney', 'age': 42, 'pet': 'cat' },
{ 'name': 'fred', 'age': 35, 'pet': 'goldfish' }
];
var groupByAge = lodash.groupBy(characters, 'age');
//console.log(groupByAge);
var groupByAgeAndPet = lodash.mapValues(groupByAge, function(value){
return lodash.groupBy(value, 'pet');
});
// this will display the actual object instead of the string
console.log(groupByAgeAndPet[35]);
怎么了?请同时添加想要的结果。是否要按pet排序您正在返回groupBy(值,'pet')的映射中,该映射返回一个您正在传入的数组值witch是一个对象,因此它返回一个带有对象的数组。您在尝试执行什么操作,以便我们可以帮助添加预期的返回
let lodash = require('lodash');
var characters = [
{ 'name': 'barney', 'age': 42, 'pet': 'dog' },
{ 'name': 'fred', 'age': 35, 'pet': 'dog' },
{ 'name': 'barney', 'age': 42, 'pet': 'cat' },
{ 'name': 'fred', 'age': 35, 'pet': 'goldfish' }
];
var groupByAge = lodash.groupBy(characters, 'age');
//console.log(groupByAge);
var groupByAgeAndPet = lodash.mapValues(groupByAge, function(value){
return lodash.groupBy(value, 'pet');
});
// this will display the actual object instead of the string
console.log(groupByAgeAndPet[35]);