programing

정의되지 않은 lodash groupby 키 변경

bestcode 2022. 8. 18. 23:41
반응형

정의되지 않은 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.keycategory__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

반응형