如何使用普通 JS 在 JSON 中获取同一对象的另一个字段?
How to get another field of same object in JSON with vanilla JS?
我有一个 JSON 这样的:
[
{
"title": "film1",
"actor": ["jack", "fred"]
},
{
"title": "film2",
"actor": ["jack", "tom"]
},
{
"title": "film3",
"actor": ["albert", "luke"]
}
]
有一个输入元素,用户可以在此 JSON 中进行搜索。
当用户键入一个字符串时,应用程序应该 return 相应“title”字段的列表。
示例:
用户键入“jack”。该应用应该 return:
- film1
- film2
因为字符串“jack”只在film1和film2[=的“actor”数组中29=].
我该如何编码?我想我应该使用 Object.values 和 Array.prototype.reduce() 但我不确定如何使用。
试试这个
var actor = "jack";
var films = [];
actors.forEach((item) => {
if (item.actor.includes(actor)) films.push(item.title);
});
console.log(films);
使用JavaScript数组方法
使用 Array.filter and Array.map and Array.some 作为单行解决方案。为了进行搜索 case-insensitive 我们还需要在进行比较之前将关键字和演员姓名都转换为大写。
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>
我有一个 JSON 这样的:
[
{
"title": "film1",
"actor": ["jack", "fred"]
},
{
"title": "film2",
"actor": ["jack", "tom"]
},
{
"title": "film3",
"actor": ["albert", "luke"]
}
]
有一个输入元素,用户可以在此 JSON 中进行搜索。 当用户键入一个字符串时,应用程序应该 return 相应“title”字段的列表。
示例: 用户键入“jack”。该应用应该 return:
- film1
- film2
因为字符串“jack”只在film1和film2[=的“actor”数组中29=].
我该如何编码?我想我应该使用 Object.values 和 Array.prototype.reduce() 但我不确定如何使用。
试试这个
var actor = "jack";
var films = [];
actors.forEach((item) => {
if (item.actor.includes(actor)) films.push(item.title);
});
console.log(films);
使用JavaScript数组方法
使用 Array.filter and Array.map and Array.some 作为单行解决方案。为了进行搜索 case-insensitive 我们还需要在进行比较之前将关键字和演员姓名都转换为大写。
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>