【发布时间】:2021-01-16 08:40:35
【问题描述】:
当事件侦听器“keyup”激活时,我试图仅显示数组中的 3 个项目,因为我过滤它们。 问题是当我 显示 产品时它没有过滤任何内容(但在 console.log 中所有内容都正确过滤),但 它只显示数组中的前 3 个项目 ,而不是过滤后的项目。
我在数组上使用 map 方法时尝试过使用slice(0,3)。
我做错了什么?
代码如下:
var url = '/dataset.json';
let produits = [];
var productsList = document.getElementById("productsList")
const searchBar = document.getElementById('searchbar')
const noResults = document.getElementById('no-results')
// get data from JSON
fetch(url)
.then(res => res.json())
.then((output) => {
produits = output
console.log(produits)
displayProducts(produits)
})
.catch(err => { throw err });
// Function that returns <li> items
const displayProducts = (produits) => {
const htmlString = produits
.slice(0, 3)
.map((produit) => {
return `
<li class="produitWrapper">
<div class="imgProduit">
<img src="https://d1tydw6090df56.cloudfront.net/products/320x240/${produit.imageKeyHashes}.jpg"
alt="">
</div>
<div class="infosProduit">
<h2>${produit.title} - </h2>
<h3>${produit.mpn}</h3>
<br>
<p>${produit.description}</p>
</div>
</li>
`;
})
.join("");
productsList.innerHTML = htmlString;
}
searchBar.addEventListener('keyup', (e) => {
const searchString = e.target.value.toLowerCase();
const produitsFiltres = produits.filter(item => {
// noResults.style.display = "block";)
return (
item.mpn.toLowerCase().includes(searchString) ||
item.description.toLowerCase().includes(searchString) ||
item.title.toLowerCase().includes(searchString)
)
});
console.log(produitsFiltres)
})
【问题讨论】:
-
也许是因为你在打电话,
.slice(0, 3)?另外,您不应该在承诺的then中返回produits并分配它const produits = fetch...?
标签: javascript arrays dictionary dom filter