2017-10-25 3 views
1

ループを持つfor ofループがあり、これはNeo4Jデータベースから結果を得ます。 Object.assignを使用して、結果オブジェクトを取得し、そのオブジェクトから新しいオブジェクトにプロパティを割り当てます。私の理解はこれが不変であるということです。オブジェクトを配列に追加するときのforループの不変性

次に、返された到達結果の配列に新しい結果オブジェクトを追加します。

ループの外側に空の配列を宣言し、Array.concatを使用して繰り返しごとに新しい配列を作成できます。もう一つの選択肢は、Array.pushを使うことです。私は配列にプッシュするか、変数を上書きするため、これらのどちらも不変ではありません。

すべてのオブジェクトの結果配列で終わる方法はありますか?それは不変ですか?

let results = [] 
for (const row of argsArray) { 
    for (const key in row) { 
     const neo4jPropInUse = await neo4j.session(null, cypher.ngp(key, row[key])) 
     if (neo4jPropInUse.length !== 0) { 
      console.log('IN USE DETECTED') 
      const thingResult = Object.assign({}, { 
       [thingSerialNumber]: neo4jPropInUse[0].get(`RESULT`).properties[thingSerialNumber], 
       key: key 
      }) 
      results = results.concat([thingResult]) 

     } 
    } 
} 
+0

次いで '.freeze()'ラッパー・オブジェクトラッパー・オブジェクトのプロパティとして配列をカプセル化? – cowbert

答えて

1

constを使用してオブジェクトを宣言しても、その内容を変更することはできますが、それ以上は再割り当てできません。ループの終了後に変更不可能な配列を返すことが目標であれば、Object.freezeを使用するとオブジェクトの変更を浅くすることができます(浅い)。

Object.freeze(results); 

この配列からプッシュまたはポップしようとすると、エラーが発生します。これは "浅い凍結"であり、配列の一部であるオブジェクト内の値は変更できます。お役に立てれば。

enter image description here

+0

フィードバックをいただきありがとうございます。現在、各結果オブジェクトは作成されており、変更されません。問題は、各オブジェクトを配列に入れる必要があるため、配列内にX個のオブジェクトがある配列に終わることです。配列の長さは不明なので、const 'result1'、const' result2' =などを使うことはできません。それぞれの結果に対して新しい配列を生成し、最後の配列を終わり。 – Kainan

+0

申し訳ありませんが、あなたは何を求めているのか不明ですが、結果をconst配列として宣言し、値をプッシュすることができます。その後、最終的な配列を取得したら、フリーズして内容を変更することができます。 – Asleepace

+0

@Kainan結果= results.concat([thingResult])の代わりに、results.push(thingResult)を実行します。 – Asleepace

関連する問題