4

node.js アプリケーションの javascript に次のコードがあります。ただし、特定のオブジェクトが my variable に格納されていませんappointment。それらを設定しても、直接アクセスすると機能します:console.log(appointment.test);

このコードで何が間違っていますか?

var appointment = {
    subscribed: false,
    enoughAssis: false,
    studentSlotsOpen: false
};
console.log(appointment);
for (var key in appointmentsDB[i]) {
    appointment[key] = appointmentsDB[i][key];    
}

appointment.test= "res";

console.log(appointment.test);
console.log(appointment);

そして、ここに生成された出力があります:

{ subscribed: false,
  enoughAssis: false,
  studentSlotsOpen: false }
res
{ comment: 'fsadsf',
  room: 'dqfa',
  reqAssi: 3,
  maxStud: 20,
  timeSlot: 8,
  week: 31,
  year: 2013,
  day: 3,
  _id: 51f957e1200cb0803f000001,
  students: [],
  assis: [] }

変数は次のconsole.log(appointmentsDB[i])ようになります。

{ comment: 'fsadsf',
  room: 'dqfa',
  reqAssi: 3,
  maxStud: 20,
  timeSlot: 8,
  week: 31,
  year: 2013,
  day: 3,
  _id: 51f957e1200cb0803f000001,
  students: [],
  assis: [] }

次のコマンド:

console.log(Object.getOwnPropertyNames(appointmentsDB[i]), Object.getOwnPropertyNames(Object.getPrototypeOf(appointmentsDB[i])));

ショー:

[ '_activePaths',
  '_events',
  'errors',
  '_maxListeners',
  '_selected',
  '_saveError',
  '_posts',
  'save',
  '_pres',
  '_validationError',
  '_strictMode',
  'isNew',
  '_doc',
  '_shardval' ] [ 'assis',
  'timeSlot',
  'db',
  '_schema',
  'id',
  'base',
  'day',
  'collection',
  'reqAssi',
  'constructor',
  'comment',
  'year',
  'room',
  'students',
  'week',
  '_id',
  'maxStud' ]

ただし、最後の出力には、エントリ test、subscribed、ufulAssis、studentSlotsOpen も含まれていると思います。このコードのどこが間違っていますか?

私が見つけた解決策は、必要な要素を手動でコピーすることでした。

4

1 に答える 1

5

通常のオブジェクトではなくDocument オブジェクトを使用している可能性があります。これらには、スキーマと のプロパティのみを生成するカスタムtoJSONメソッド_idがあり、他には何もありません。for-in ループを使用してそのメソッドをappointmentオブジェクトにコピーすると、ログに記録されるときにシリアル化も異なります。

試す

for (var key in appointmentsDB[i].toObject()) {
    appointment[key] = appointmentsDB[i][key];    
}

appointment.test= "res";

console.log(appointment);
于 2013-07-31T20:24:50.810 に答える