【问题标题】:Why is this function undefined when I call it?为什么我调用这个函数时未定义它?
【发布时间】:2014-07-12 18:10:00
【问题描述】:

我有一个非常简单的函数,它返回 undefined 给我。我有一个退货声明,但它仍然存在。有什么建议吗?

var scrabble = function (letter) {
    var newLetter = letter.toLowerCase();
    var letterSplit = newLetter.split(" ");
    var newArray = [];
    var values = [["a", 1], ["b", 3], ["c", 3], ["d", 2], ["e", 1], ["f", 4], ["g", 2], ["h", 4], ["i", 1], ["j", 8], ["k", 5], ["l", 1], ["m", 3], ["n", 1], ["o", 1],
     ["p", 3], ["q", 10], ["r", 1], ["s", 1], ["t", 1], ["u", 1], ["v", 4], ["w", 4], ["x", 8], ["y", 4], ["z", 10]];
    for (var i = 0; i < values.length; i++) {
        if (values[i][0] === letterSplit[0]) {
            newArray.push(values[i][1]);
        }
    }
    return newArray;
}; 

【问题讨论】:

  • 您总是在与 letterSplit[0] 进行比较,这将是您信件的第一个单词。粘贴您的输入以便我们查看,同时告诉我们您期望得到的响应是什么
  • 我真的很想知道为什么你不能在这里使用哈希。它会让整个事情变得更加直接。
  • 是的,values 这里应该真的是一个对象。
  • 嗯,输入是一个字母,所以他们会比较。我最初有另一个 if 语句,它有点复杂,因此它将测试 letterSplit 数组的第一个字母与整个 values 数组的第一个字母。但是,它返回未定义,因此我更改了 if 语句以尝试简化它并查看是否有帮助。我的规范跑步者只是为了让“c”等于 3。
  • 那不是你的函数返回未定义,也就是说它找不到变量scrabble

标签: javascript function return undefined


【解决方案1】:

@Magpie,我不确定您的要求。但是,此演示可能会为您提供一些解决问题的想法。

JavaScript:-

(function () {
    var scrabble = function (letter) {
        var newLetter = letter.toLowerCase();
        var letterSplit = newLetter.split(" ");
        var newArray = [];
        var values = [
            ["a", 1],
            ["b", 3],
            ["c", 3],
            ["d", 2],
            ["e", 1],
            ["f", 4],
            ["g", 2],
            ["h", 4],
            ["i", 1],
            ["j", 8],
            ["k", 5],
            ["l", 1],
            ["m", 3],
            ["n", 1],
            ["o", 1],
            ["p", 3],
            ["q", 10],
            ["r", 1],
            ["s", 1],
            ["t", 1],
            ["u", 1],
            ["v", 4],
            ["w", 4],
            ["x", 8],
            ["y", 4],
            ["z", 10]
        ];
        var valuesLength = values.length;
        var letterSplitLength = letterSplit.length;

        for (var valuesIndex = 0; valuesIndex < valuesLength; valuesIndex++) {
            for (var letterSplitIndex = 0; letterSplitIndex < letterSplitLength; letterSplitIndex++) {
                if (values[valuesIndex][0] === letterSplit[letterSplitIndex]) {
                    newArray.push(values[valuesIndex][1]);
                }
            }
        }

        return newArray;
    };

    var output = scrabble("H e l l o w o r l d");
    console.log(output);
    alert(output);
}());

输出:-

[2, 1, 4, 1, 1, 1, 1, 1, 1, 4] 

JSFiddle 演示:- http://jsfiddle.net/w3devjs/6R2X9/

【讨论】:

  • 我们已经确定该功能有效,这就是为什么它未定义的原因。请参阅 OP 上的 cmets。
猜你喜欢
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 2021-11-20
  • 2011-05-07
  • 1970-01-01
相关资源
最近更新 更多