#javascript #arrays
Вопрос:
у меня есть массив , и я хочу отфильтровать массив с помощью BHID.
let array = [
{
"type": "Feature",
"properties":
{
"PID": 0, "SID": 2, "BHID": 1,
}
},
{
"type": "Feature",
"properties":
{
"PID": 0, "SID": 8, "BHID": 2,
},
},
{
"type": "Feature",
"properties":
{
"PID": 0, "SID": 5, "BHID": 1,
},
}
]
а затем я пытаюсь отфильтровать массив по BHID:
for (let id = 0; id < maxId 1; id ) {
let entriesWithID = array.filter((entry) => {
entry.properties.BHID === id;
for (let i = 0; i < entriesWithID.length; i ) {
console.log(entriesWithID[i]);
}
});
Но я не могу получить правильный результат, что я должен сделать, чтобы получить правильный результат.
Комментарии:
1. Это
for (let i = 0; i < entriesWithID.length
должно быть вне вашей.filter()
функции обратного вызова, и вы должны возвращаться с помощьюreturn entry.properties.BHID === id;
2. Если бы я правильно понял, что вы хотите сделать, вы могли бы просто:
const filteredArray = array.filter(item => item.properties.BHID <= maxId)
Ответ №1:
Вы можете сохранять результат entriesWithID
на каждой итерации в объекте следующим образом:
const array = [
{
"type": "Feature",
"properties": { "PID": 0, "SID": 2, "BHID": 1 }
},
{
"type": "Feature",
"properties": { "PID": 0, "SID": 8, "BHID": 2 }
},
{
"type": "Feature",
"properties": { "PID": 0, "SID": 5, "BHID": 1 }
}
];
const maxId = 2;
const res = {};
for (let id = 0; id < maxId 1; id ) {
const entriesWithID = array.filter(entry => entry.properties.BHID === id);
res[id] = entriesWithID;
}
console.log(res);
Другой Подход:
Используя Array#reduce
, вы можете перебирать array
и группировать элементы в объекте BHID
по нужному диапазону. Это сохранит только категории, найденные в массиве, без пустых:
const array = [
{
"type": "Feature",
"properties": { "PID": 0, "SID": 2, "BHID": 1 }
},
{
"type": "Feature",
"properties": { "PID": 0, "SID": 8, "BHID": 2 }
},
{
"type": "Feature",
"properties": { "PID": 0, "SID": 5, "BHID": 1 }
}
];
const maxId = 2;
const res = array.reduce((acc, item) => {
const bhId = item.properties.BHID;
if(bhId >= 0 amp;amp; bhId <= maxId) {
acc[bhId] = [ ...(acc[bhId] || []), item ];
}
return acc;
}, {})
console.log(res);
Ответ №2:
Вам нужно вернуть проверку логического условия в filter
методе.
Документы для этого.
Измените свой код вот так.
for (let id = 0; id < maxId 1; id ) {
let entriesWithID = array.filter((entry) => {
return entry.properties.BHID === id;
});