JavaScript - 在数组中查找第一个字符

5

我想在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开头的单词(例如“where”或“why”)。

我之前没有太多JavaScript的经验,而且我已经苦思冥想这个问题很长时间了。

2个回答

8

数组/字符串有一个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中的控制台),以查看生成的数组。


2
myArray[i][0] == letter 可能更快吗? - mistapink
你应该运行一个基准测试,但是它应该更快,因为没有函数调用。好主意! :) - lukas.pukenis
谢谢!现在我刚刚添加了一个<textarea>并返回了它的值。 - Jason Stackhouse
3
@mistapink,直接在字符串上进行索引查找在ECMA标准中没有被指定。这只是在一些实现中起作用。标准的方法是使用charAtmyArray[i].charAt(0) == letter - katspaugh
它似乎不能与我的文本区域一起使用。它没有返回任何内容。 - Jason Stackhouse
显示剩余2条评论

5

您可以过滤数组,仅包含特定值,例如以“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
使用underscore时,您可以简单地编写以下内容:
var randomWordWithW = _.chain(words).filter(function(word) {
  return word[0] == 'w';
}).shuffle().first().value()

这看起来有点难以实现到随机函数中。你知道怎么做吗? - Jason Stackhouse
@user1426486 更新了我的答案,这样你就可以看到如何从中选择一个随机元素。 - Tharabas
我的整个JavaScript代码在实现时甚至都无法工作。我经验不够,所以看不出问题所在。 - Jason Stackhouse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接