Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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 groupby键_Javascript_Vue.js_Vuejs2_Lodash - Fatal编程技术网

Javascript 更改未定义的lodash groupby键

Javascript 更改未定义的lodash groupby键,javascript,vue.js,vuejs2,lodash,Javascript,Vue.js,Vuejs2,Lodash,因此,我正在使用lodash groupby函数进行表行分组,这样做很好 var value = _.groupBy(itemData, groupkey) 因此,它将把这些原始数据从api itemData = { 0: { name: 'article 1', category: 'news' }, 1: { name: 'article 2', category: 'lifestyle'

因此,我正在使用lodash groupby函数进行表行分组,这样做很好

var value = _.groupBy(itemData, groupkey)
因此,它将把这些原始数据从api

itemData = {
  0: {
         name: 'article 1',
         category: 'news'
     },
  1: {
         name: 'article 2',
         category: 'lifestyle'
     },
  2: {
         name: 'article 3',
         category: 'news'
     }
}
像这样

itemData = {
  news: 
     0: {
         name: 'article 1',
         category: 'news'
        },
     1: {
         name: 'article 3',
         category: 'news'
        }
  lifesyle:  
     0: {
         name: 'article 2',
         category: 'lifestyle'
     }
}
itemData = {
  undefined: 
     0: {
         name: 'article 1',
         category: undefined
        },
     1: {
         name: 'article 3',
         category: undefined
        }
  lifesyle:  
     0: {
         name: 'article 2',
         category: 'lifestyle'
     }
}
但当我的数据api在数据库中没有类别数据,所以它返回null或未定义时,它将显示如下

itemData = {
  news: 
     0: {
         name: 'article 1',
         category: 'news'
        },
     1: {
         name: 'article 3',
         category: 'news'
        }
  lifesyle:  
     0: {
         name: 'article 2',
         category: 'lifestyle'
     }
}
itemData = {
  undefined: 
     0: {
         name: 'article 1',
         category: undefined
        },
     1: {
         name: 'article 3',
         category: undefined
        }
  lifesyle:  
     0: {
         name: 'article 2',
         category: 'lifestyle'
     }
}
那么,如何捕捉那些未定义的内容并将其更改为其他单词呢?比如说把它改成“未分类”或“其他”

更新

好的,首先我很抱歉我以为使用vanila javascript和vue js时也会这样做。。。事实上,我正在vue js环境中使用它。。。当我尝试你所有的答案时,我得到了一个完全不同的结果

所以在vue中,代码如下:我在computed属性中调用这个分组

computer:{
 groupData(){
  retun _.groupBy(this.itemData.data, this.group.key);
 }
}
更新2 因此,在看到api中的原始数据后,我在后端代码中使用了laravel雄辩的关系,因此它将返回这种api

itemData = {
 0: {
      name: 'article 1',
      category_id : 1,
      category__article: {
        id: 1,
        name: 'news'
      }
    }
 1: {
      name: 'article 2',
      category_id : 2,
      category__article: {
        id: 2,
        name: 'lifestyle'
      }
    }
 2: {
      name: 'article 3',
      category_id : '',
      category__article: undefined
    }
}

这个.group.key中的
category\uu article.name
直接比较值,或者(!t)

Lodash可以接受函数作为参数。因此,您可以将类别值默认为“其他”,如下所示:

const itemData={
0: {
名称:“第1条”,
类别:“新闻”
},
1: {
名称:“第2条”,
类别:未定义
},
2: {
名称:“第3条”,
类别:空
}
};
const groupkey=“类别”;
const defaultCategory=“其他”;
var值=u2;.groupBy(itemData,item=>{
常量值=项[groupkey];
如果(!值){
返回默认类别;
}
返回值;
});
/*
返回:
{
新闻:[{名称:“第1条”,类别:“新闻”}],
其他:[
{名称:“第2条”,类别:未定义},
{名称:“第3条”,类别:空}
]
}

*/
您可以首先
mapValues
将类别值从null或未定义更改为
未分类
,然后在新对象上使用
groupBy

const itemData={0:{name:'article 1',category:undefined},1:{name:'article 2',category:null},2:{name:'article 3',category:'news'}
常量结果=u2;.chain(itemData)
.mapValues(o=>{
常量类别='未分类'
返回{.assign({},o,!o.category&&{category})
}).groupBy('category').value()
console.log(结果)
这样就可以了

 const groupData = _.groupBy(itemData, item => {
   return _.get(item, 'category__article.name', 'no_category');
 });
使用uu.get获取嵌套值(item.category_uuarticle.name),如果该值未定义,则提供默认值(no_category)

const itemData={
0: {
名称:“第1条”,
类别识别号:1,
类别文章:{
id:1,
姓名:“新闻”
}
},
1: {
名称:“第2条”,
类别识别号:2,
类别文章:{
id:2,
名称:“生活方式”
}
},
2: {
名称:“第3条”,
类别id:“”,
类别文章:未定义
}
}
const groupData=uu.groupBy(itemData,item=>uu.get(item,'category\uu article.name','no\u category');
console.log('groupData',groupData)

这很奇怪,我得到了行动、链条等价值。。。非常奇怪,我不确定问题出在哪里,
this.group.key
只需要是你想要分组的密钥。是的,我已经换成了那个,它应该可以工作,但我得到的仍然是未定义的类别可能是
this.itemData.data
应该是
this.itemData
否,必须是this.itemData.data才能使其工作。。。。我今天做对了。。。我错过什么了吗@LaurensiusTony这对我来说就像预期的一样。请看,您是否可以尝试在jsbin中复制您的案例并共享链接?另外,请确保您使用的是最新版本的lodash。@LaurensiusTony不确定vue specifics是否会破坏这里的逻辑。我建议您在vue应用程序中设置一个断点,转储变量并尝试运行数据转换。我认为更有可能是数据结构有问题。@LaurensiusTony请检查:)仍然得到相同的结果。。。我不知道哪一个是错的。。。让我们。