【问题标题】:JavaScript - Search for first character in an ArrayJavaScript - 搜索数组中的第一个字符
【发布时间】:2012-06-06 15:25:58
【问题描述】:

我正在尝试在 JavaScript 中查找数组中的第一个字符。

我有这个随机函数(不是最好的,但我会改进它):

function random() {
var Rand = Math.floor(Math.random()*myArray.length);
document.getElementById('tr').innerHTML = myArray[Rand];
}

这是我的数组列表。

myArray = ["where", "to", "get", "under", "over", "why"];

如果用户只想要带有 W 的数组,则只显示第一个字母中带有 W 的单词。 (比如“在哪里”或“为什么”)

我以前对 JavaScript 没有太多经验,而且我多年来一直在处理这个问题。

【问题讨论】:

    标签: javascript arrays math search random


    【解决方案1】:

    有一个数组/字符串的indexOf() 方法可以为您提供一个字母的位置。 第一个字母的位置是0(零),所以

    function filter(letter) {
      var results = [];
      var len = myArray.length;
      for (var i = 0; i < len; i++) {
        if (myArray[i].indexOf(letter) == 0) results.push(myArray[i]);
      }
      return results;
    }
    

    这是一个jsFiddle。运行前打开控制台(Chrome:ctrl+shift+i,或 FireBug 中的控制台)查看生成的数组。

    【讨论】:

    • myArray[i][0] == letter 可能更快吗?
    • 你应该运行一个基准测试,但是它应该更快,因为没有函数调用。好点子! :)
    • 谢谢!现在我刚刚添加了一个&lt;textarea&gt; 并返回了它的值。
    • @mistapink,ECMA 标准中没有指定对字符串的直接索引查找。它恰好适用于某些实现。标准方式是charAtmyArray[i].charAt(0) == letter.
    • 它似乎不适用于我的文本区域。它什么也不返回。
    【解决方案2】:

    您可以过滤数组以仅包含特定值,例如以“w”开头的值

    var words = ["where", "to", "get", "under", "over", "why"];
    var wordsWithW = words.filter(function(word) {
      return word[0] == 'w';
    });
    var randomWordWithW = wordsWithW[Math.floor(Math.random() * wordsWithW.length];
    ... // operate on the filtered array afterwards
    

    如果您打算支持 浏览器,您可能需要考虑使用underscore.jsPrototype

    当使用下划线时,你可以简单地这样写:

    var randomWordWithW = _.chain(words).filter(function(word) {
      return word[0] == 'w';
    }).shuffle().first().value()
    

    【讨论】:

    • 这看起来有点难以实现随机函数。你知道怎么做吗?
    • @user1426486 更新了我的答案,以便您了解如何从中选择随机元素。
    • 我的整个 JavaScript 代码在实现代码时甚至都不起作用。我不是很有经验,所以我看不出它有什么问题。
    猜你喜欢
    • 1970-01-01
    • 2017-06-19
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多