【问题标题】:JS Array allways returns undefined and length = 0JS 数组总是返回未定义且长度 = 0
【发布时间】:2017-07-13 12:20:39
【问题描述】:

(使用 Node.js) 嗨,我有一个带有用户(用户类)的数组,当我用 console.log 打印数组时,它会正确显示内容并显示它的长度为 3,但是当我尝试从数组中获取任何东西时,它返回undefined,对于*.length,它返回0。问题出在哪里?

exports.users = [];

exports.loadUsers = (callback) => {
    let more = true;
    let i = 0;
     while(more) {
		let us = _usersFolder + "us_" + i + "/";
		if(fs.existsSync(us)) {
			fs.readFile(path.join(us + "personal.json"), (err, data) => {
				if(err) {
					console.log("failed to load file!");
					return;
				}
				let json_personal = JSON.parse(data);
				this.users.push(new User(json_personal));
			});
			i++;
		} else {
			more = false;
		}
    }
    callback();
}


exports.getUserById = (id) => {
    console.log(this.users);
    console.log("length: " + this.users.length);
    console.log(this.users[0]);
	for(let i = 0; i < this.users.length; i++) {
		let u = this.users[i];
		console.log(u.id);
		if(u.id === id) {
			return u;
		}
	}
	return false;
}

getUserById 在回调中被调用,所以用户已经加载完毕。

【问题讨论】:

  • 这是一个对象。尝试打印 this.users[0].key
  • 三行代码都是连续的吗?
  • 请添加更多您的实际代码。
  • 这 3 行只是一个示例,您可以查看它们各自返回的内容。这很奇怪,因为它实际上适用于其他功能。另外,如果我尝试使用 for each,也行不通。
  • 我认为这不是您的实际代码。不过,这就是为什么我要求提供实际代码的原因。我们无法根据“示例”代码提供帮助。

标签: javascript arrays


【解决方案1】:

这取决于您在哪里使用“this”对象。 'this' 引用的对象可能与存储数组的对象不同('this' 取决于您使用它的范围)。

我需要更多信息来帮助你。

【讨论】:

  • 这是因为我在节点的 export.* 方法中
  • 你在哪里定义了“用户”数组?
【解决方案2】:
var users=[{"num":1},{"num":2},{"num":3}];

console.log(this.users);
console.log("length: " + this.users.length);
console.log(this.users[0]);

输出

(3) [对象,对象,对象]

长度:3

对象 {a: 1}

【讨论】:

    【解决方案3】:

    我希望您在控制台中打印后进行定义。

    var users  = [];
    console.log(users);
    console.log("length: " + users.length);
    console.log(users[0]);
    users.push(1);
    users.push(2);
    users.push(3);

    console.log() 的输出具有误导性;当您记录那个时间时,没有任何价值。之后它被添加了。它打印 对象的引用,而不是状态值。所以你会一直看到当前状态值。

    【讨论】:

    • 那为什么是console.log(this.users);完美运行?正如您在图像中看到的,它正确打印了数组,但之后它就像数组是空的
    • 因为 console.log 打印了对对象的引用
    猜你喜欢
    • 2016-03-14
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2016-04-19
    • 2021-05-24
    • 1970-01-01
    相关资源
    最近更新 更多