我有一個這樣的 JSON:
[
{
"title": "film1",
"actor": ["jack", "fred"]
},
{
"title": "film2",
"actor": ["jack", "tom"]
},
{
"title": "film3",
"actor": ["albert", "luke"]
}
]
有一個輸入元素,用戶可以在此 JSON 中進行搜索。當用戶鍵入字串時,應用程式應回傳相應“標題”欄位的串列。
示例:用戶鍵入“ jack ”。該應用程式應回傳:
- film1
- film2
因為字串 "jack" 只存在于film1和film2的 " actor " 陣列中。
我該如何編碼?我想我應該使用 Object.values 和 Array.prototype.reduce() 但我不確定如何。
uj5u.com熱心網友回復:
使用 JavaScript 陣列方法
將Array.filter和Array.map和Array.some用于單行解決方案。為了使搜索不區分大小寫,我們還需要在進行比較之前將關鍵字和演員名稱都轉換為大寫。
films.filter(p => p.actor.some(name => name.toUpperCase() === keyword)).map(p => p.title);
運行代碼片段以了解它是如何作業的
let films = [
{
"title": "film1",
"actor": ["jack", "fred"]
},
{
"title": "film2",
"actor": ["jack", "tom"]
},
{
"title": "film3",
"actor": ["albert", "luke"]
}
];
search.onchange = function(e) {
let keyword = (search.value || "").trim().toUpperCase();
let result = films.filter(p => p.actor.some(name => name.toUpperCase() === keyword)).map(p => p.title);
if (!result.length) result.push("No matches");
output.innerHTML = "<li>" result.join("</li><li>") "</li>";
}
search.onchange();
<p>Enter a keyword and press enter:</p>
<input id="search" type="text" value="Jack">
<ul id="output"></ul>
uj5u.com熱心網友回復:
試試這個
var actor = "jack";
var films = [];
actors.forEach((item) => {
if (item.actor.includes(actor)) films.push(item.title);
});
console.log(films);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/480989.html
標籤:javascript 数组 json 目的 搜索
下一篇:回傳所有寵物名稱的陣列
