JS Нахождение одинаковых пар ключ-значение в массиве?
Подскажите, пожалуйста, как эффективнее всего находить элементы массива с одинаковыми значениями ключей? Приведу простой пример.
let book = [{
id: 1,
urlAddress: 'Monday-starts-on-Saturday',
bookName: "Понедельник начинается в субботу",
seriesNumber: 1,
},
{
id: 2,
urlAddress: "Harry-Potter-and-the-Order-of-the-Phoenix",
bookName: "Гарри Поттер и Орден Феникса",
seriesNumber: 2,
},
{
id: 44,
urlAddress: "The-Tale-of-the-Three-Pigs",
bookName: "Сказание о трех свинах",
seriesNumber: 5,
},
{
id: 6,
urlAddress: "Harry-Potter-and-the-Philosopher's-Stone",
bookName: "Гарри Поттер и философский камень",
seriesNumber: 2,
},
];
let list = document.getElementById("myList");
<ul id="myList">
</ul>
Как найти все книги со значением seriesNumber: 2 и записать значения их имен в ul ? Что б было
<ul id="myList"><li>Гарри Поттер и Орден Феникса</li><li>Гарри Поттер и Орден Феникса</li></ul>
Ответы (2 шт):
Автор решения: Dmitry Krasnov
→ Ссылка
Чтобы извлечь необходимые объекты можно воспользоваться либо for() как писали раньше, либо reduce()
Вот пример с использованием reduce()
function reducer(acc, value) {
if (value.seriesNumber === 2) {
acc.push(value);
}
return acc;
}
const filterBooks = book.reduce(reducer, []);
В html элемент можно позже положить с помощью el.innerHTML
Автор решения: Михаил Камахин
→ Ссылка
Не знаю что эффективнее, но вот просто рабочий код:
const books = [{
id: 1,
urlAddress: 'Monday-starts-on-Saturday',
bookName: "Понедельник начинается в субботу",
seriesNumber: 1,
},
{
id: 2,
urlAddress: "Harry-Potter-and-the-Order-of-the-Phoenix",
bookName: "Гарри Поттер и Орден Феникса",
seriesNumber: 2,
},
{
id: 44,
urlAddress: "The-Tale-of-the-Three-Pigs",
bookName: "Сказание о трех свинах",
seriesNumber: 5,
},
{
id: 6,
urlAddress: "Harry-Potter-and-the-Philosopher's-Stone",
bookName: "Гарри Поттер и философский камень",
seriesNumber: 2,
},
];
const filteredBooks = books.slice().filter(item => item.seriesNumber === 2);
const ul = document.querySelector('#ul');
filteredBooks.forEach(item => {
const li = document.createElement('li');
li.innerHTML = item.bookName;
ul.append(li);
});
<ul id="ul">
</ul>