JS Array allways返回undefined和length = 0

时间:2017-07-13 12:20:40

标签: javascript arrays

(使用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,因此用户已经加载。

enter image description here

3 个答案:

答案 0 :(得分:0)

这取决于您使用'this'对象的位置。 'this'可能会引用与您存储数组的对象不同的对象('this'根据您使用它的范围而变化)。

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

答案 1 :(得分:0)

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}

答案 2 :(得分:-1)

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

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

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