Как получить массив объектов только с объектами которые удовлетворяют поиску во fuse.js?
Есть объект с информацией об авторах, есть набор опций fuse.js, и есть функция-конструктор Fuse которая осуществляет поиск по ключам объекта, и возвращает массив объектов с совпадениями по ключам.
const authors = [
{
"char": "A",
"list": [
{ "id": 12, "name": 'Aaron Akinyemi' },
{ "id": 13, "name": 'Annie Proulx' },
]
},
{
"char": "B",
"list": [
{ "id": 11, "name": 'Beatrix Protter' },
{ "id": 14, "name": 'Barbara James' },
]
}
]
const options = {
includeScore: true,
// Search in `list` array
keys: ['list.name']
}
const fuse = new Fuse(authors, options)
const result = fuse.search('ro')
// Должен вывести имена которые содержат словосочетание ro
for (let i = 0; i < result.length; i++) {
console.log(result[i].item)
}
В результате имеем вот это:
{
char: "A",
list: [
{
id: 12,
name: "Aaron Akinyemi"
},
{
id: 13,
name: "Annie Proulx"
}
]
}
{
char: "B",
list: [
{
id: 11,
name: "Beatrix Protter"
},
{
id: 14,
name: "Barbara James"
}
]
}
Как видно, получается что если в массиве есть хотя бы один элемент который соответствует результату поиска, выводится весь массив целиком, а не элемент в котором найдено совпадение. Мне же нужно чтобы выводился массив только с теми элементами в которых было найдено совпадение, т.е так:
{
char: "A",
list: [
{
id: 12,
name: "Aaron Akinyemi"
},
{
id: 13,
name: "Annie Proulx"
}
]
}
{
char: "B",
list: [
{
id: 11,
name: "Beatrix Protter"
}
]
}
Можно ли получить такой результат через fuse?
const authors = [
{
"char": "A",
"list": [
{ "id": 12, "name": 'Aaron Akinyemi' },
{ "id": 13, "name": 'Annie Proulx' },
]
},
{
"char": "B",
"list": [
{ "id": 11, "name": 'Beatrix Protter' },
{ "id": 14, "name": 'Barbara James' },
]
}
]
const options = {
includeScore: true,
// Search in `list` array
keys: ['list.name']
}
const fuse = new Fuse(authors, options)
const result = fuse.search('ro')
// Должен вывести имена которые содержат словосочетание ro
for (let i = 0; i < result.length; i++) {
console.log(result[i].item)
}
<script src="https://cdn.jsdelivr.net/npm/fuse.js/dist/fuse.js"></script>