Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.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 从lodash中的map()返回groupBy()对对象数组的结果将导致[object]_Javascript_Lodash - Fatal编程技术网

Javascript 从lodash中的map()返回groupBy()对对象数组的结果将导致[object]

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',

我尝试在一个对象数组上创建两个groupBy(基本上我尝试链接两个groupBy)

然而,输出是:

[{dog:[[Object]],金鱼:[[Object]},{dog:[[Object] ],类别:[[Object]]}]

如果我在映射中执行console.log(),我将得到想要的结果

我应该使用什么来代替
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]);