Loda sh: фильтровать, когда у меня есть свойство вложенного массива? - PullRequest
1 голос
/ 30 мая 2020

Рассмотрим пример ниже. Я использую Loda sh

"home":[
   {
      "data":{
         "interests":["sports", "travel", "boxing"],
         "city":["x", "y", "z"],
         "name":"test1"
      },
      "count":["1", "2"],
      "country":"CA"
   },
   {
      "data":{
         "interests":["painting", "travel", "dancing"],
         "city":["a", "y", "b"],
         "name":"test2"
      },
      "count":["1","3"],
      "country":"US"
   }
]

Если я попробую эту функцию на примере пары ключевых значений:

_.find(home, ['data.country', 'US']);  // It is returning me the 2nd object

требование:

Я хочу, чтобы все объекты, в которых data.interests «танцуют».

Пробовал:

_.find(home, ['data.interests', 'dancing'])  // It is returning [] 

Я также пробовал filter (), where () и map, но не смог получить объект полностью.

Заранее спасибо.

1 Ответ

1 голос
/ 30 мая 2020

Вы можете использовать vanilla JS или loda sh funcntions - отфильтруйте массив и для каждого элемента проверьте, содержит ли массив data.interests запрошенное слово.

Vanilla:

const home = [{"data":{"interests":["sports","travel","boxing"],"city":["x","y","z"],"name":"test1"},"count":["1","2"],"country":"CA"},{"data":{"interests":["painting","travel","dancing"],"city":["a","y","b"],"name":"test2"},"count":["1","3"],"country":"US"}]

const result = home.filter(o => o.data.interests.includes('dancing'))

console.log(result)

Loda sh:

const home = [{"data":{"interests":["sports","travel","boxing"],"city":["x","y","z"],"name":"test1"},"count":["1","2"],"country":"CA"},{"data":{"interests":["painting","travel","dancing"],"city":["a","y","b"],"name":"test2"},"count":["1","3"],"country":"US"}]

const result = _.filter(home, o => _.includes(o.data.interests, 'dancing'))

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
...