下划线_.map()方法和对象构造函数

时间:2016-01-31 05:08:31

标签: object constructor underscore.js

我会尽我所能解释这个问题。 首先我使用的是下划线。 我正在为一组数据进行非常简单的数据可视化。

此时,我只是想获取我想要的数据。

在我进一步解释之前,这是我的数据片段。

var data =

[
    {
        "id": "a09f4967-10a8-53c1-b53f-8e49ee255734",
        "type": "chat",
        "requested_by": "zoidberg@example.com",
        "initial_message": "And here I am using my own lungs like a sucker.",
        "created_at": 1420190706057,
        "page_url": "http://www.awesome3ftcakes.com/contact-us.html",
        "referrer_url": "http://www.bing.com/search?q=top",
        "entry_url": "unknown",
        "ip_address": "132.145.187.8",
        "user_agent": "Mozilla/5.0 (Windows NT 6.1; rv:11.4) Gecko/20100101 Firefox/11.4.6",
        "latitude": 51.339695,
        "longitude": 12.373075,
        "chat_waittime": 10,
        "chat_duration": 205,
        "survey_score": 30,
        "language_code": "",
        "transcript": [
            {
                "date": 1420190706057,
                "alias": "Zoidberg",
                "message": "And here I am using my own lungs like a sucker."
            },
            {
                "id": "jerome@awesome3ftcakes.com",
                "date": 1420190733788,
                "alias": "Jerome",
                "message": "Hi. I'm Troy McClure. You may remember me from such self-help tapes as \"Smoke Yourself Thin\" and \"Get Some Confidence, Stupid!\""
            }
        ]
    }, ...

所以,这是我的问题:

我创建了一个构造函数,如下所示:

function ChatSession(data) {

    this.duration = data.chat_duration;
    this.score = data.survey_score;
    this.repId = data.transcript;
};


var mappedObjects = _.map(data, function(chatSessionData) {
    return new ChatSession(chatSessionData)
});

console.log(mappedObjects);

console.log view

如果你看一下上面的图片^,你会看到我得到我的新ChatSession对象,有持续时间,然后是成绩单,然后得分。

我遇到问题的是这个...我想在成绩单中更具体。我想引用转录数组中的第二个对象,并具体获取id或别名。

我尝试过很多东西,但基本上都会遇到同样的错误。例如,我试过这个:

function ChatSession(data) {

    this.duration = data.chat_duration;
    this.score = data.survey_score;
    this.repId = data.transcript[1].id;
};

我在控制台中收到以下消息:

  

未捕获的TypeError:无法读取属性' id'未定义的

即使我关闭了id部分,错误仍然是:

  

未捕获的TypeError:无法读取属性' 1'未定义的

非常感谢任何帮助。我把头撞在墙上。

1 个答案:

答案 0 :(得分:1)

您的收藏集中的一个或多个数据对象的transcriptundefined。使用下面的构造函数来检测集合中哪些数据对象具有错过的transcript属性。

function ChatSession(data) {
    this.duration = data.chat_duration;
    this.score = data.survey_score;
    this.repId = (data.transcript && data.transcript[1]) ? data.transcript[1].id : undefined;
};