2017-07-13 24 views
0

(Node.jsを使用) こんにちは、console.logで配列を出力すると、ユーザ(Userクラス)の配列が表示されます。それは長さが3であることを示していますが、配列から何かを取得しようとすると、は未定義、* .lengthは0を返します。問題はどこですか?JS配列は常に未定義で長さ= 0を返す

exports.users = []; 
 

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

 

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

のユーザーがすでにロードされているのでgetUserByIdは、コールバックで呼ばれています。

enter image description here

+0

それがオブジェクトの。 this.users [0] .key – KimR

+0

3行すべてのコードは連続していますか? –

+1

実際のコードをさらに追加してください。 – str

答えて

-1

私はあなたがコンソールに印刷した後、あなたが定義している願っています。

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()の出力は誤解を招きます。あなたがその時間を記録している間は価値はありませんでした。その後、追加されました。状態値ではなく、オブジェクトの参照を出力します。したがって、常に最新の状態値が表示されます。

+0

次に、なぜconsole.log(this.users);完璧に動作しますか?イメージでわかるように、配列を正しく出力しますが、後で配列が空であるようです –

+0

console.logはオブジェクトへの参照を出力します – Escoute

0

「this」オブジェクトを使用する場所によって異なります。 'this'は、配列を格納したオブジェクトとは別のオブジェクトへの参照を作成する可能性があります( 'this'は、使用するスコープによって異なります)。

私はあなたに役立つ情報が必要です。

+0

これはノードからのエクスポート*メソッドです –

+0

どこのユーザー配列を定義しましたか? –

+0

あなたの目でそれを見ることができます.. –

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

オブジェクト{1}

関連する問題