정의되지 않은 lodash groupby 키 변경
그래서 나는 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'
}
}
그러나 데이터베이스에 카테고리 데이터가 없는 데이터 api가 있어서 null 또는 정의되지 않은 상태로 반환되면 다음과 같이 표시됩니다.
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에서 코드는 다음과 같습니다: 나는 계산 속성에서 이 그룹화를 호출합니다.
computer:{
groupData(){
retun _.groupBy(this.itemData.data, this.group.key);
}
}
업데이트 2 그래서 api에서 원시 데이터를 본 후 백엔드 코드에서 laravel allustive relationship을 사용하고 있기 때문에 이러한 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
}
}
그리고 그 속은?this.group.key
이category__article.name
이것으로 충분하다
const groupData = _.groupBy(itemData, item => {
return _.get(item, 'category__article.name', 'no_category');
});
_.get을 사용하여 중첩된 값(item.category__article.name)을 가져오고 값이 정의되지 않은 경우 기본값(no_category)을 지정합니다.
const 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
}
}
const groupData = _.groupBy(itemData, item => _.get(item, 'category__article.name', 'no_category'));
console.log('groupData', groupData);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.js"></script>
Lodash groupBy 메서드는 함수를 매개 변수로 받아들일 수 있습니다.따라서 다음과 같이 범주 값을 '기타'로 기본 설정할 수 있습니다.
const itemData = {
0: {
name: "article 1",
category: "news"
},
1: {
name: "article 2",
category: undefined
},
2: {
name: "article 3",
category: null
}
};
const groupkey = "category";
const defaultCategory = "other";
var value = _.groupBy(itemData, item => {
const value = item[groupkey];
if (!value) {
return defaultCategory;
}
return value;
});
/*
Returns:
{
news: [{ name: "article 1", category: "news" }],
other: [
{ name: "article 2", category: undefined },
{ name: "article 3", category: null }
]
}
*/
값을 직접 비교하거나 (!t)
if (t === undefined) {
return 'Undefined value!';
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
네가 먼저 할 수 있어mapValues
범주 값을 늘 또는 정의되지 않음에서 로 변경하다uncategorized
그런 다음 사용groupBy
그 새로운 오브젝트에 대해서요.
const itemData = {0: {name: 'article 1',category: undefined},1: {name: 'article 2',category: null},2: {name: 'article 3', category: 'news'}}
const result = _.chain(itemData)
.mapValues(o => {
const category = 'uncategorized'
return _.assign({}, o, !o.category && {category})
}).groupBy('category').value()
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
언급URL : https://stackoverflow.com/questions/48925539/change-lodash-groupby-key-for-undefined
'programing' 카테고리의 다른 글
무엇 현재 GCC(우분투 특히)의 기본 C-std 표준 버전일까요? (0) | 2022.08.19 |
---|---|
datepicker viewetify에서 날짜를 선택하면 메서드를 어떻게 호출할 수 있나요? (0) | 2022.08.19 |
Java String을 바이트로 변환하는 방법[] (0) | 2022.08.18 |
구조에서 변수 이름 앞에 있는 점은 무엇을 의미합니까? (0) | 2022.08.18 |
VueJ를 통해 DOM 요소 선택s (0) | 2022.08.18 |