jQuery $ .each vs for循环对象

时间:2014-02-03 07:25:40

标签: javascript jquery loops

我有以下代码在悬停时返回中文单词的英文翻译。

//return Chinese/English words from database
$("#npc_dialog span").on("mouseover", function() {
    var word = $(this).text();
    $("#currentWord").text(parseHoveredText(word));
}).on("mouseout", function() {
    $("#currentWord").empty();
});

它适用于for循环:

function parseHoveredText (word) {
    for (vocab in hoveredWords) {
        if(word.toLowerCase() === vocab) {
            return hoveredWords[vocab];
        }
    }
};

但如果我使用jQuery $.each则不行。

function parseHoveredText (word) {
    $.each(hoveredWords, function(key, value) {
        if(word.toLowerCase() === key) {
            return value;
        }
    });
};

在这两种情况下,返回值的console.log()都会产生相同的值。为什么jQuery不起作用?

在for循环中:

console.log(hoveredWords[vocab]);提供:You

在jQuery $ .each中:

console.log(value);提供:You

2 个答案:

答案 0 :(得分:3)

这是因为你有一个匿名函数,当你从每个回调函数返回value而不是parseHoveredText方法时。

function parseHoveredText (word) {
    var val;
    $.each(hoveredWords, function(key, value) {
        if(word.toLowerCase() === key) {
            val =value;
            //return false to prevent any further iterations
            return false;
        }
    });
    return val;
};

但从它的外观来看,它应该像

一样简单
function parseHoveredText (word) {
    return hoveredWords[word.toLowerCase()];
};

答案 1 :(得分:1)

每个语句中的return语句将结束each循环,而不是从函数返回值。您需要返回false才能完成for循环而不是返回值。在从each函数返回并从函数parseHoveredText

返回该值之前,您应该为每个循环中的某个变量(可以从每个块中访问)赋值
function parseHoveredText (word) {
    var result = "";
    $.each(hoveredWords, function(key, value) {
        if(word.toLowerCase() === key) {
            result = value;
            return false;
        }
    });
    return result;
};