【问题标题】:Finding a single, or multiple values from a string of arrays in Javascript从 Javascript 中的数组字符串中查找单个或多个值
【发布时间】:2015-09-22 16:48:15
【问题描述】:

我正在尝试在我的数组中搜索我输入的任何数字,但它没有按预期工作。

在外部javascript中:

window.onload = startup;

function startup() {
    runArraySequence () {
        writeArray.onclick = findArray;
    }
}
var array = [5,3,9,12,19,15,13,6,9,2,4,7,8,17];

function findArray () {
//The following script is a part of a 12 "else if" radio button form.
    if (arrayRad11.checked) {
        var searchNumber = document.getElementById("arrayValue").value;
        var arrayResult = -1;
        for (var i=0; i < array.length; i++) {
            if (array[i] === searchNumber) {
                i = arrayResult;
            }
            if (arrayResult < 0)  {
                msg6.innerHTML = "Found number " + searchNumber + ", " + arrayResult + " times.";
            }
        }
    }
}

HTML 代码:

<div>
    <form>
        <input type="radio" id="arrayRad11" name="array" value="11">Find Number:</input>
        <input type="number" id="arrayValue" placeholder="Find Array Number"></input><br />
        <input type="button" id="writeArray" value="Skriv tall"></input>
        <input type="button" value="Reset" onClick="window.location.reload()"></input>
    </form>
    <p id="msg6"></p>
</div>

也上传到jsfiddle

【问题讨论】:

  • 当我说“按预期”时,我想我应该添加;它给了我结果:找到第 6 次,-1 次。
  • var searchNumber = +document.getElementById("arrayValue").value;

标签: javascript arrays search


【解决方案1】:

代码中似乎存在一些逻辑问题,但修复起来相当容易:

writeArray.onclick = findArray;

var array = [5, 3, 9, 12, 19, 15, 13, 6, 9, 2, 4, 7, 8, 17, 9];

function findArray() {
  //The following script is a part of a 12 "else if" radio button form.
  if (arrayRad11.checked) {
    var searchNumber = document.getElementById("arrayValue").value;
    var arrayResult = 0;
    for (var i = 0; i < array.length; i++) {
      if (array[i] == searchNumber) {
        arrayResult++;
      }
    }
    if (arrayResult > 0) {
      msg6.innerHTML = "Found number " + searchNumber + ", " + arrayResult + " times.";
    }
  }
}
<div>
  <form>
    <input type="radio" id="arrayRad11" name="array" value="11">Find Number:</input>
    <input type="number" id="arrayValue" placeholder="Find Array Number"></input>
    <br />
    <input type="button" id="writeArray" value="Skriv tall"></input>
    <input type="button" value="Reset" onClick="window.location.reload()"></input>
  </form>
  <p id="msg6"></p>
</div>
  1. 我删除了你的 runArraySequence() 函数,因为它在你的 JS 中不存在。它阻止了 onclick 的访问。

  2. 根据您的消息 msg6,您似乎在寻找数组中数字的频率。如果 == 语句为真,我将 arrayResult 值设置为从 0 开始并增加计数。确保您知道 == 和 === 之间的类型关联差异。

  3. 我将您的第三个 if 语句移到了 for 循环之外,这样消息结果只会出现一次。

希望这会有所帮助!

【讨论】:

  • 是的,这基本上是我想象中的样子。当数字 2 不是数组的一部分时,“找到数字 2,1 次”是否有解决方案?
  • 我不确定我是否完全理解您的要求,但显示的消息由第三条“if”语句控制。如果希望消息在不同的情况下显示,则需要更改 (arrayResult > 0) 条件。
【解决方案2】:

您可以使用Array.prototype.indexOf() 方法在数组中查找值

[1,2,3].indexOf(2)
// will give you 1

要获取多个值,您需要在循环中使用 indexOf

var find=2;
var i,arr=[1,2,3,2,7],entries=[];

while(-1<(i=arr.indexOf(find,i+1)))
  entries.push(i);

console.log('I found '+ents.length+' entries of '+find+' in array:',ents)
//I found 2 entries of 2 in array: Array [ 1, 3 ]

【讨论】:

    猜你喜欢
    • 2016-11-10
    • 2022-01-09
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多