#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));