Javascript 如何在数组中仅返回匹配/筛选的字符串?
我正在创建一个用于连接Api的小应用程序,并将收集JSON文件的卡片附加到HTML网页上 这些卡片应该是可搜索的,为了实现这一点,我需要创建一个过滤器 我是新来的,还在学这门课 我只提取了名为arr的变量中的卡片名称,并尝试从搜索输入字段中筛选出/或匹配一个值,该字段为strInput document.getElementByIdsearchButton.AddEventListener单击,函数E{Javascript 如何在数组中仅返回匹配/筛选的字符串?,javascript,arrays,filter,Javascript,Arrays,Filter,我正在创建一个用于连接Api的小应用程序,并将收集JSON文件的卡片附加到HTML网页上 这些卡片应该是可搜索的,为了实现这一点,我需要创建一个过滤器 我是新来的,还在学这门课 我只提取了名为arr的变量中的卡片名称,并尝试从搜索输入字段中筛选出/或匹配一个值,该字段为strInput document.getElementByIdsearchButton.AddEventListener单击,函数E{ const parentDiv = document.getElementById("car
const parentDiv = document.getElementById("cards");
if ( parentDiv.hasChildNodes() === true ) {
removeStuff();
} else {
filteredCards("https://api.magicthegathering.io/v1/cards");
}
}, false)
displayCards("https://api.magicthegathering.io/v1/cards");
function filteredCards(url) {
fetch(url)
.then((resp) => resp.json())
.then((data) => {
let myInput = document.getElementById("search").value;
let strInput = '"' + myInput + '"';
let arr = [];
for ( i in data.cards) {
let jsonValue = data.cards[i];
let name = jsonValue.name;
arr.push(name);
}
let result = strInput.match(arr);
console.log(result);
console.log(arr);
console.log(strInput);
});
};
console.log(arr); // returns NULL even thought the string matches.
您可以创建一个使用array.Find并传入arr的方法,strInput.array.Find将查找第一个匹配项
getName: function (arr, strInput) {
var name = arr.find(n => n === strInput)
return name
}
这里有一些来自官方mozzila文档的更多阅读
传递给match方法的参数实际上不是matcher,而是字符串。该方法希望传入一个
只需构建一个简单的正则表达式,然后迭代data.cards并在条件通过时将其添加到数组中
让myInput=document.getElementByIdsearch.value;
设myInputRegex=newregexmyinput'gi';
设arr=[];
const matchedTokens=data.cards.filtercard=>{
return card.name.matchmyInputRegex;
};
console.logmatchedtoken;
console.logstrInput;有两种方法可以简单地实现,.find和.filter .find将返回第一个匹配项,并作为字符串返回 .filter将返回所有匹配项,并作为数组返回 它们都使用相同风格的代码,您只需更改方法名称 arr.filteritem=>item==strInput | arr.finditem=>item==strInput 顺便说一句,有一些东西你可以交换,以获得那些甜巧克力饼点数
let arr = [];
for ( i in data.cards) {
let jsonValue = data.cards[i];
let name = jsonValue.name;
arr.push(name);
}
可以改为写
此外,您不需要执行“+myInput+”;要确保某个内容是字符串,这正是您可能在那里尝试执行的操作-您可以使用myInput.toString-当然,您的数据可能有包含引号的名称,但万一这是一个错误,我想我会指出它谢谢!
这正是我想要的:D
让myInput=document.getElementByIdsearch.value;
设myInputRegex=newregexmyinput'gi';
设arr=[];
const matchedTokens=data.cards.filtercard=>{
return card.name.matchmyInputRegex;
};
console.logmatchedtoken;
console.logstrInput;
你从代码中得到了什么输出?你希望它是什么?请给出一个具体的例子。你的问题是不明确的。人们用regex答案和Array.filter答案来回答。你能更具体地说明你在寻找什么吗?
let arr = data.cards.map((card) => card.name);