从单独的JavaScript文件访问子属性的问题

时间:2018-01-24 12:36:22

标签: javascript node.js

我试图从javascript文件访问子属性,它给了我一些奇怪的东西!

假设这是我的名为 data.js

的JS文件
module.exports = {
    something: {
        name: "Something",
        num: 1,
        email: "something@gmail.com"
    },

    somethingtwo: {
        name: "Something Something",
        num: 2,
        email: "somethingtwo@gmail.com"
    },
};

在名为 app.js 的主要js文件中,我需要访问它,它看起来像

    var persons = require('./data.js');

    var getAName = function() {
    for(var name in persons) {
       console.log(name.email);
    }
}

我真的不知道出了什么问题但是我已经在很长一段时间内尝试了这个。预期输出是来自 data.js 文件的电子邮件ID,但是,我得到未定义次条目数(如果data.js中有2个条目,那么我得到2个undefine等等。)

如何在没有这些未定义的情况下访问 data.js 中的电子邮件或数字?

感谢高级 PS:console.log(name)返回了两件事

4 个答案:

答案 0 :(得分:1)

嗯,name.email未定义,因为name是一个字符串。

您可以通过编写

进行测试
console.log(typeof name);

现在,要解决您的问题,您需要正确访问该属性:

var getAName = function() {
    for (var name in persons) {
        console.log(persons[name].email)
    }
}

返回:

  

something@gmail.com
  somethingtwo@gmail.com

答案 1 :(得分:0)

for(var name in persons) {
           //persons is actually an object not array
           //you are actually iterating through keys of an object
           //var name represent a key in that object
           console.log(persons[name]); //value corresponding to the key
}

我想这段代码会给你想要的结果。

答案 2 :(得分:0)

  

您应该使用console.log(persons[name].email)

答案 3 :(得分:-1)

要求不要自动调用模块

var DataArchive = require('./data.js');
var module = DataArchive.module;
var persons = module.exports;

var getAName = function() {
for(var person in persons) {
    //person should be something (first iteration) and somethingtwo (second iteration)
   console.log(person.email);
}