0

我完全被这里的这段代码难住了。基本上,我试图通过一个 Word 对象数组,并使用 switch 语句根据单词类型组织它们。这都是由 jQuery 等待按下按钮触发的。

for (var i=0; i<wordList.length; i++)
{
    switch (wordList[i].type) {
        case "1": nouns.push(wordList[i].word); break;
        //"1" is the type flag for noun, the "word" property is the string containing the word
        ... //Rest of word types
    }
}

这个词实际上不会被分配给名词数组。因此,我将 case “1” 行更改为:

case "1": nouns.push(wordList[i].word); asdf = nouns; asdf2 = wordList[i].word; break;

如果没有 var,asdf 和 asdf2 就变成了隐式全局的,所以我可以在控制台中使用它们:

asdf
asdf2

分别返回 [] 和 "I",所以它可以拾取单词,但它没有将它添加到数组中。

asdf.push(asdf2)

返回 1,下一个 asdf 日志给了我 ["I"]。

这里有什么问题?

编辑:完整的相关代码

//Declare arrays
var articles=[], properNouns=[], nouns=[], pluralNouns=[], adjectives=[], conjunctions=[], verbs=[], pluralVerbs=[], adverbs=[], prepositions=[], interrogatives=[];

//Sort words into proper arrays
for (var i=0; i<wordList.length; i++)
{
    switch (wordList[i].type) {
        case "1": nouns.push(wordList[i].word); asdf = nouns; asdf2 = wordList[i].word; break;
        case "11": pluralNouns.push(wordList[i].word); break;
        case "12": properNouns.push(wordList[i].word); break;
        case "2": verbs.push(wordList[i].word); break;
        case "21": pluralVerbs.push(wordList[i].word); break;
        case "3": adjectives.push(wordList[i].word); break;
        case "4": adverbs.push(wordList[i].word); break;
        case "5": conjunctions.push(wordList[i].word); break;
        case "6": prepositions.push(wordList[i].word); break;
        case "7": interrogatives.push(wordList[i].word); break;
        case "8": articles.push(wordList[i].word); break;
        default: console.log("Error, could not sort "+wordList[i].word); break;
    }
}
4

3 回答 3

1

问题原因: 数据文件已被修改,VERBS 不再正确标记,导致没有生成句子

为什么数组为空: 处理数组的系统清空了数组,新变量asdf只是指向数组,我在控制台使用的时候是空的

我怎么能避免很多这样的:

case "1": nouns.push(wordList[i].word); asdf = nouns.slice(0); break;

让它成为公共服务公告。在调试期间复制您的阵列。

于 2013-06-14T03:11:21.277 回答
1

这是一个JSFiddle示例。

您的代码对示例所做的唯一更改:

  • 词表的定义

  • 在 jsfiddle 示例中,将输出附加到的 div 标签

它似乎做你想做的事。你对 wordList 的定义不同吗?

    $(document).ready(function () {
    //Declare arrays
    var articles = [], properNouns = [], nouns = [], pluralNouns = [], adjectives = [], conjunctions = [], verbs = [], pluralVerbs = [], adverbs = [], prepositions = [], interrogatives = [];

    var wordList = [{ 'type': "1", 'word': 'foo' },
         { 'type': "1", 'word': 'foo1' },
         { 'type': "1", 'word': 'foo2'}, 
         { 'type': "1", 'word': 'foo3' }];

    //Sort words into proper arrays
    for (var i = 0; i < wordList.length; i++) {
        switch (wordList[i].type) {
            case "1":
                nouns.push(wordList[i].word);
                asdf = nouns;
                asdf2 = wordList[i].word;
                break;
            case "11":
                pluralNouns.push(wordList[i].word);
                break;
            case "12":
                properNouns.push(wordList[i].word);
                break;
            case "2":
                verbs.push(wordList[i].word);
                break;
            case "21":
                pluralVerbs.push(wordList[i].word);
                break;
            case "3":
                adjectives.push(wordList[i].word);
                break;
            case "4":
                adverbs.push(wordList[i].word);
                break;
            case "5":
                conjunctions.push(wordList[i].word);
                break;
            case "6":
                prepositions.push(wordList[i].word);
                break;
            case "7":
                interrogatives.push(wordList[i].word);
                break;
            case "8":
                articles.push(wordList[i].word);
                break;
            default:
                console.log("Error, could not sort " + wordList[i].word);
                break;
        }
    }
    for (var i in nouns) {
        console.log(nouns[i]);
        $('#output').append(nouns[i] + '<br>');
    }
    console.log(nouns);
});
于 2013-06-14T02:33:56.263 回答
1

是的 - 挖掘一个旧线程......

我今天遇到了同样的问题。我花了一段时间才发现我在 Chrome 调试器中有一个 Watch Expression 清空了数组..

所以要推送的代码如下所示:

$scope.emailMsg.Bcc.push(EmailAddress);

像这样在调试器中观察表达式

$scope.emailMsg.Bcc = [];

所以 - 每次我步进我的数组都会归零:)

于 2014-02-16T18:16:00.590 回答