【问题标题】:Converting Array of Strings with spaces to Lowercase in Javascript then Searching Through Them Fails in Webkit在 Javascript 中将带空格的字符串数组转换为小写,然后在 Webkit 中搜索它们失败
【发布时间】:2013-10-22 09:29:20
【问题描述】:

我正在尝试编写一段代码,该代码采用包含项目名称(项目)的空格的字符串数组,并在其中搜索字符串(str)。只要我不首先尝试将数组转换为小写,以便我可以捕获搜索字符串的所有可能情况,代码就可以正常工作。附加的 jsfiddle 中的代码在 Firefox 中运行良好,但在 WebKit 或 IE 中运行良好。任何人都可以提供任何见解吗?

http://jsfiddle.net/Y6zKx/16/


//项目名称数组,0包含“字符串”

var items = new Array('Item Name Contains String', 'This item is missing it');

//函数searchArray将在字符串数组strArray中搜索字符串str

function searchArray(str, strArray) {
    for (var j = 0; j < strArray.length; j++) {
        if (strArray[j].match(str)) return j;
    }
    return -1;
}

//将 items Array 转换为小写,以便搜索不区分大小写

//这在 Firefox 中有效,但在 Webkit 中无效

var lowerCaseItems = $.map(items, String.toLowerCase);
alert(lowerCaseItems);

//这似乎创建了相同的输出,但在 Firefox 或 Webkit 中都不起作用:

alert(items.toString().toLowerCase());

//如果数组包含“电池”,函数将返回正位置

contains = searchArray("string", lowerCaseItems);
alert(contains);

//如果找到id,显示信息

if ($('#noItems').length) {
    $('#emptyCart').show();
}

//如果未找到str,则显示消息

if (contains == -1) {
    $('#noString').show();
}
//else 
else {
    alert("String Found");
}

【问题讨论】:

    标签: javascript jquery arrays


    【解决方案1】:

    试试这个:

    var lowerCaseItems = $.map(items, function(n,i){return n.toLowerCase();});
    

    jQuery.map 在空/窗口上下文中调用函数,并将项目作为参数传递给函数。因此,传递 toLowerCase 函数将不起作用,因为它必须在 jQuery.map 不做的字符串对象上调用。

    【讨论】:

      【解决方案2】:

      Firefox 很宽容:

      从 JavaScript 1.6 开始,Firefox 中也可以使用 String 实例方法(尽管不是 ECMAScript 标准的一部分),用于将 String 方法应用于任何对象:

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String

      这就是 String.toLowerCase 在 FF 中工作的原因,但严格来说,它不是规范的一部分,不应期望在其他任何地方工作。

      【讨论】:

      • @NathanielBannister 如果你想要代码:$.map(items, function(x) { return x.toLowerCase(); }); :)
      【解决方案3】:

      您没有正确使用 $.map() 函数。它需要一个带有 2 个参数的回调函数。请参阅documentation 并尝试以下操作:

      var lowerCaseItems = $.map(items, 
              function(item, index) {
                  return item.toLowerCase();
              });
      

      它适用于 Chrome。

      【讨论】:

        猜你喜欢
        • 2011-04-26
        • 2015-02-08
        • 2017-05-18
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        • 1970-01-01
        相关资源
        最近更新 更多