Javascript 更改未定义的lodash groupby键
因此,我正在使用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'
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请检查:)仍然得到相同的结果。。。我不知道哪一个是错的。。。让我们。