JavaScript函数不检索数组元素

时间:2017-08-04 02:02:48

标签: javascript jquery arrays for-loop var

我有一系列元素(我将在下面显示一个片段),具有不同级别的数组元素,我想要一个特定的函数来检索某个级别的数组元素和将它们呈现在一个表中,对于我最初的两个函数无缝地工作,但是在复制我以前的函数并更改相应的变量命名和引用时,第二个函数无法成功地将数组元素显示到屏幕上。

我一直在寻找可能的误引用或轻微缺失的元素,但我不知所措。

这是我的var数组:

{title: "Basketball Topics", followers: 122, articles: 4, posts: [
    {postId: 106, contents: "data", author: "data", replies:[
        {replyId: 16, comment: "data", comment_author: "data"},
        {replyId: 17, comment: "data", comment_author: "data"},
        {replyId: 18, comment: "data", comment_author: "data"}
    ]},
]}

以下是一些非常小的onClick事件函数表,用于显示适当的页面

function topicOnClick (node, topic){
    'use strict';
    node.on("click", function() {
        showSingleTopic(topic);
    });
}

function threadOnClick (node, topic){
    'use strict';
    node.on("click", function() {

        showComments(topic);
    });
}

以下是我的数组引用函数:

function getSingleTopic(someTopics, topicTitle) {
    return someTopics.find(function (topic) {
        return topic.title === topicTitle;
    });    
}

function getSingleComment(someTopics, topicTitle) {
    return someTopics.find(function (topic) {
        return topic.contents === topicTitle;
    });    

}

以下是尝试通过表格元素向屏幕显示数组元素的循环:

function showSingleTopic (topicDetails){

    'use strict';

    var page = $("#individualForumPage");

    var individualTopicTable = $("<table class='forumTable'><tr><th>Contents</th><th>Author</th></tr></table>");



        for (index in topicDetails.posts) {

                        var post = topicDetails.posts[index]; 
        var row = $("<tr></tr>");
        row.append("<td>" + post.contents + "</td>");
        row.append("<td>" + post.author + "</td>");

        threadOnClick(row, topics[index]);
        individualTopicTable.append(row);

        }
    page.html(individualTopicTable);
}

这是重复的功能,它不会显示在屏幕上(也不会检索数组元素):

function showComments (commentDetails){

    'use strict';

    var page = $("#commentsPage");


    var commentTable = $("<table class='forumTable'><tr><th>Author</th><th>Comments</th></tr></table>");



        for (index in commentDetails.replies) {

                        var reply = commentDetails.replies[index]; 

        var row = $("<tr></tr>");
        row.append("<td>" + reply.comment_author + "</td>");
        row.append("<td>" + reply.comment + "</td>");

        commentTable.append(row);

        }

page.html(commentTable);


}

1 个答案:

答案 0 :(得分:1)

在showSingleTopic中,传递给点击处理程序的值似乎不正确。你有:

threadOnClick(row, topics[index]);
individualTopicTable.append(row);

但它应该是:

threadOnClick(row, post);
individualTopicTable.append(row);

您已引用的帖子具有子键“详细信息”,在showComments()中引用。您的原始代码将索引应用于与最初派生的数组不同的数组。