【问题标题】:Searching an array for values ending in certain characters in JavaScript在数组中搜索以 JavaScript 中某些字符结尾的值
【发布时间】:2014-02-24 03:05:26
【问题描述】:

所以我正在寻找用 javascript 编写简单函数的帮助。我要做的是创建一个包含 6 个名称的数组,并仅打印以“ie”或“y”结尾的名称。

这是我的代码 - 感谢任何帮助。不幸的是,它从未达到功能:(

//An array of names
var nameList = new Array("Freddie", "Mary", "Thomas", "Suzie", "Terry", "Kevin");
//Prints names before searching
document.write(nameList);

function e_names(nameList) {

    for (var index = 0; index < arrayList.length; index++) {
        var name = arrayList[index];
        if (name == /\bie\b/ || name == /\by\b/)
        document.write("",name, " </ br>");
        index++;
    } //End of for loop
} //End if method

【问题讨论】:

  • 你从哪里调用函数?
  • \b 表示单词边界。因此,您的表达式将测试字符串是否包含 iey 作为 single 单词(如果您正确使用它们)。我建议阅读MDN guide about regular expressions 以更好地了解如何使用正则表达式(提示:不要将它们与要测试的值比较)。
  • //End of for loop --- 好奇,这条评论对你真的有帮助吗?
  • 要根据正则表达式测试字符串,请调用后者的test method。附言是&lt;br&gt;&lt;br /&gt;,而不是&lt;/ br&gt;
  • index++; 在您的代码中出现两次。

标签: javascript regex arrays


【解决方案1】:

使用/(ie|y)$/($用来匹配结尾)来测试一下:

if (/(ie|y)$/.test(name))

【讨论】:

  • 感谢您的帮助!
【解决方案2】:

不幸的是,它从未达到功能:(

在您的代码中,您定义了一个函数,但从不执行它。像这样执行它:

e_names(namesList);

循环有错误:

for (var index = 0; index < arrayList.length; index++) {

arrayList 没有定义,至少在这段代码中没有定义。它可能是先前定义的变量或全局变量,但为什么函数需要一个名为nameList 的参数?我认为这是一个简单的错字。

if (name == /\bie\b/ || name == /\by\b/)

我不确定 equal 正则表达式意味着什么,但我会冒险猜测它不会做你想要的。我认为您想要 .test 功能,例如:

if (/\bie\b/.test(name) || /\by\b/.test(name))

您的模式包括\b,即在y 或ie 之后 之前的单词边界。因此,它只会匹配具有 i 或 ie 作为精确字符串或它们周围有空格的字符串。它们不会匹配 arraykeycookie。我认为您的意思是按照@xdazz 的回答将它们锚定到字符串的末尾。他甚至为您将这两个表达式组合在一起:

if (/(ie|y)$/.test(name))

最后,你加倍index

index++;

这只会迭代“Freddie”、“Thomas”和“Terry”,因为您会增加两次。循环结构末尾的index++ 就足够了。把这条线去掉。

现在:

//An array of names
var nameList = [ "Freddie", "Mary", "Thomas", "Suzie", "Terry", "Kevin" ];
//Prints names before searching
document.write(nameList);

function e_names(names) {
    for (var index = 0; index < names.length; index++) {
        var name = arrayList[index];
        if (/(ie|y)$/.test(name)) {
            document.write("",name, " </ br>");
        }
    } //End of for loop
} //End if method

e_names(nameList);

请注意,我重命名了参数,以免与范围界定混淆,并且我还在 if 块周围放置了花括号。我通常不会改变其他人的代码风格,但我觉得在这种情况下需要让它更清晰。

我还更改了数组结构以使用文字表示法。围绕new Array 构造函数进行了很多争论。这个例子可能是安全的,但是如果只有一个元素或者数组内容是动态的,它就会变得混乱。例如,new Array(17) 是什么意思?这意味着创建一个包含 17 个空引用的数组。它不会创建一个包含数字 17 的数组。出于这个原因,我的建议是使用[ ] 语法。详情见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

【讨论】:

  • 感谢您对数组文字的全面回答。都很重要!
  • Brandon - 非常感谢,您的解释非常有帮助!而且我绝对不是要包含 index++ 两次,并且在多次更改我的代码的过程中也忘记了更改我的命名方案。最后..愚蠢的我,我什至没有注意到我什至从未调用过该函数!非常感谢您的建议,我将查看您留下的链接!谢谢大家的帮助!
  • ["Freddie", "Mary", "Thomas", "Suzie", "Terry", "Kevin"].filter(/./.test, /(ie|y)$/ ).join("
    ")
  • 我喜欢@dandavid 的方法。这是非常consice。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2014-06-11
相关资源
最近更新 更多