1

我正在尝试编写一段代码,该代码采用包含项目名称(项目)的空格的字符串数组并在其中搜索字符串(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数组转换为小写,这样搜索不区分大小写

//这适用于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");
}
4

3 回答 3

11

Try this:

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

jQuery.map invokes the function on null/window context and passes the item as a parameter to the function. So, passing toLowerCase function won't work as it must be invoked on string object which jQuery.map does not do.

于 2013-10-14T18:28:38.857 回答
4

Firefox 很宽容:

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

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

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

于 2013-10-14T18:30:39.280 回答
0

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

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

它适用于 Chrome。

于 2013-10-14T18:32:02.720 回答