program tip

Lodash : 중첩 된 개체가있을 때 필터를 어떻게 사용합니까?

radiobox 2020. 11. 16. 08:05
반응형

Lodash : 중첩 된 개체가있을 때 필터를 어떻게 사용합니까?


이 예를 고려하십시오. Lodash를 사용 하고 있습니다

 'data': [
        {
            'category': {
                'uri': '/categories/0b092e7c-4d2c-4eba-8c4e-80937c9e483d',
                'parent': 'Food',
                'name': 'Costco'
            },
            'amount': '15.0',
            'debit': true
        },
        {
            'category': {
                'uri': '/categories/d6c10cd2-e285-4829-ad8d-c1dc1fdeea2e',
                'parent': 'Food',
                'name': 'India Bazaar'
            },
            'amount': '10.0',
            'debit': true
        },
        {
            'category': {
                'uri': '/categories/d6c10cd2-e285-4829-ad8d-c1dc1fdeea2e',
                'parent': 'Food',
                'name': 'Sprouts'
            },
            'amount': '11.1',
            'debit': true
        },

내가 할 때

_.filter(summary.data, {'debit': true})

나는 모든 물건을 되 찾는다.

내가 원하는 게 뭐야?

나는 모든 객체를 원합니다 category.parent == 'Food'. 어떻게 할 수 있습니까?

나는 시도했다

_.filter(summary.data, {'category.parent': 'Food'})

그리고 얻었다

[]

_.filter(summary.data, function(item){
  return item.category.parent === 'Food';
});

lodash는 중첩 된 객체 정의를 허용합니다.

_.filter(summary.data, {category: {parent: 'Food'}});

v3.7.0부터 lodash는 문자열에 객체 키를 지정할 수도 있습니다.

_.filter(summary.data, ['category.parent', 'Food']);

JSFiddle의 예제 코드 : https://jsfiddle.net/6qLze9ub/

lodash는 배열을 사용한 중첩도 지원합니다. 배열 항목 중 하나를 필터링하려는 경우 (예 : category가 배열 인 경우) :

_.filter(summary.data, {category: [{parent: 'Food'}] }); 

사용자 지정 비교가 정말 필요한 경우 함수를 전달해야합니다.

_.filter(summary.data, function(item) {
  return _.includes(otherArray, item.category.parent);
});

다음과 같이 v3.7.0할 수 있습니다.

_.filter(summary.data, 'category.parent', 'Food')

_.where(summary.data, {category: {parent: 'Food'}});

트릭도해야합니다


lodash 4.x에서는 다음을 수행해야합니다.

_.filter(summary.data, ['category.parent', 'Food'])

(두 번째 인수를 감싸는 배열에 유의하십시오).

이것은 다음을 호출하는 것과 같습니다.

_.filter(summary.data, _.matchesProperty('category.parent', 'Food'))

Here are the docs for _.matchesProperty:

// The `_.matchesProperty` iteratee shorthand.
_.filter(users, ['active', false]);
// => objects for ['fred']

참고URL : https://stackoverflow.com/questions/17096988/lodash-how-do-i-use-filter-when-i-have-nested-object

반응형