首页 > 解决方案 > 如何匹配列表中的值,但在 Javascript 中返回它后面的值?

问题描述

我试图让我的函数循环遍历 var list 并匹配粘贴到 HTML 文本框中的文本。例如,现在 var 列表中仅有的两个示例,如果粘贴的文本中存在“AFCOMMMDL”,我希望该函数返回“空军表彰奖章”。我会这样做,在文本中搜索所有缩写代码,然后立即返回一个并将其推送到最终将被打印的空 finalList[]。我是 Javascript 的新手,已经搜索了一遍,找不到答案。先感谢您。

 function sortAwards() {
   //Assign rewards variable whatever content was pasted in text box
   var rewards = document.getElementById("paste").value;

    //Remove spaces from pasted text
    rewards = rewards.replace(/\s/g, '');

    //Empty list to contain all of the matches
    var finalList = [];

    var list = {
       'AFCOMMMDL': 'Air Force Commendation Medal',
        'AFACHIEVMDL': 'Air Force Achievement Medal',
    }

    for (index = 0; index < list.length; index++) {
        if (rewards.includes(index)) {
           rewards.push[index];
        }
    }

    //Test to show result
    document.getElementById('test').innerHTML = finalList;
   };

标签: javascriptlist

解决方案


你可能是这个意思

过滤器和映射(您可以使用 reduce,但这更难阅读)

const list = {
  'AFCOMMMDL': 'Air Force Commendation Medal',
  'AFACHIEVMDL': 'Air Force Achievement Medal'
}

function expandAcronyms() {
  //Assign rewards variable whatever content was pasted in text box
  var rewards = this.value;
  var finalList = rewards.split(/\W+/) // split on not words
    .filter(word => list[word])        // return only found words
    .map(word => list[word])           // lookup and return the value
    .join(", ");                       // join with ", "
  document.getElementById('test').innerHTML = finalList;
}

document.getElementById("paste").addEventListener("input",expandAcronyms)

//filter(res => res)
<textarea id="paste"></textarea>
<div id="test"></div>


推荐阅读