Как реализовать метод ‘getAllChildrenById’

#javascript #lodash

#javascript #Lodash

Вопрос:

Есть такой массив данных. Как мне реализовать фильтрацию по parentTd (одному из «родительских идентификаторов» массива), используя Lodash метод _.filter?

 "terms": [{
      "id": 13,
      "name": 'illustrator',
      "parentIds": [2, 4],
      "isCompanyArea": false
    },
    {
      "id": 14,
      "name": 'figma',   
      "parentIds": [2, 3],
      "isCompanyArea": true
    },
    {
      "id": 15,
      "name": 'sas',
      "parentIds": [3 ,4, 2],
      "isCompanyArea": false
    },
    {
      "id": 16,
      "name": 'jmp',
      "parentIds": [3],
      "isCompanyArea": false
    },
    {
      "id": 17,
      "name": 'docker',
      "parentIds": [4, 5],
      "isCompanyArea": false
    }]
  

Комментарии:

1. каков ожидаемый результат?

Ответ №1:

Вы можете использовать Array.filter() и Array.includes() :

 const getAllChildrenById = searchParentId =>
  terms.filter(({ parentIds }) => parentIds.includes(searchParentId))

const terms = [{"id":13,"name":"illustrator","parentIds":[2,4],"isCompanyArea":false},{"id":14,"name":"figma","parentIds":[2,3],"isCompanyArea":true},{"id":15,"name":"sas","parentIds":[3,4,2],"isCompanyArea":false},{"id":16,"name":"jmp","parentIds":[3],"isCompanyArea":false},{"id":17,"name":"docker","parentIds":[4,5],"isCompanyArea":false}]

const result = getAllChildrenById(4)

console.log(result)  

или эквиваленты Lodash:

 const searchParentId = searchParentId =>
  _.filter(terms, ({ parentIds }) => _.includes(parentIds, searchParentId))

const terms = [{"id":13,"name":"illustrator","parentIds":[2,4],"isCompanyArea":false},{"id":14,"name":"figma","parentIds":[2,3],"isCompanyArea":true},{"id":15,"name":"sas","parentIds":[3,4,2],"isCompanyArea":false},{"id":16,"name":"jmp","parentIds":[3],"isCompanyArea":false},{"id":17,"name":"docker","parentIds":[4,5],"isCompanyArea":false}]

const result = searchParentId(4)

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

Ответ №2:

Вы можете использовать filter в сочетании с includes для фильтрации записей, в которых parentIds содержится определенный идентификатор.

 function filter(id) {
    return _.filter(terms, term => term.parentIds.includes(id));
}
  

Кроме того, вам не нужен Lodash:

 function filter(id) {
    return terms.filter(term => term.parentIds.includes(id));
}
  

Ответ №3:

Зачем использовать Lodash, если js уже предлагает все, что вам нужно?

 const items = terms.filter(item => item.parentIds amp;amp; item.parentIds.includes(myParentId));