Javascript 如何在数组中仅返回匹配/筛选的字符串?

Javascript 如何在数组中仅返回匹配/筛选的字符串?,javascript,arrays,filter,Javascript,Arrays,Filter,我正在创建一个用于连接Api的小应用程序,并将收集JSON文件的卡片附加到HTML网页上 这些卡片应该是可搜索的,为了实现这一点,我需要创建一个过滤器 我是新来的,还在学这门课 我只提取了名为arr的变量中的卡片名称,并尝试从搜索输入字段中筛选出/或匹配一个值,该字段为strInput document.getElementByIdsearchButton.AddEventListener单击,函数E{ const parentDiv = document.getElementById("car

我正在创建一个用于连接Api的小应用程序,并将收集JSON文件的卡片附加到HTML网页上

这些卡片应该是可搜索的,为了实现这一点,我需要创建一个过滤器

我是新来的,还在学这门课

我只提取了名为arr的变量中的卡片名称,并尝试从搜索输入字段中筛选出/或匹配一个值,该字段为strInput

document.getElementByIdsearchButton.AddEventListener单击,函数E{

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);