私はlodash find
を使用して配列からオブジェクトを問い合わせ、そのオブジェクトのプロパティを設定しますが、このプロパティを設定した後に配列を出力するときは変更されません。_.findはオブジェクトへの参照を返しますか?どのように結果のプロパティを適切に設定するのですか?
JavaScriptでロダッシュでオブジェクトを処理する経験が豊富な人からのコメントに感謝します。また、問題を定式化する方法や、検索エンジンを介して他の人々の検索が容易になるようにコンテンツを編集する方法については自由にコメントすることができます。
孤立コード:
console.log('socket.io', token);
console.log(realtime);
let session = yield _.find(realtime, function(data) {
return data.token === token;
});
console.log('session object to be set');
console.log(session);
if (!session.socket) {
console.log('setting session for '+session.token+' socket '+socket.id);
session.socket = socket.id;
console.log('local reference after set');
console.log(session);
console.log('realtime after set');
console.log(realtime);
}
結果、これはconsole.log
から出力されます:
socket.io 268fc477-d4ee-4ed4-88cd-648539397df2
[ { token: '268fc477-d4ee-4ed4-88cd-648539397df2' } ]
session object to be set
{ token: '268fc477-d4ee-4ed4-88cd-648539397df2' }
setting session for 268fc477-d4ee-4ed4-88cd-648539397df2 socket /#iEqqcIsBbATDs1a-AAAB
local reference after set
{ token: '268fc477-d4ee-4ed4-88cd-648539397df2',
socket: '/#iEqqcIsBbATDs1a-AAAB' }
realtime after set
[ { token: '268fc477-d4ee-4ed4-88cd-648539397df2' } ]
期待される結果、私は、このオブジェクトは、データ構造に変更することにしたい、最後のプリントを見てそのオブジェクトは、次のものから由来しています。
socket.io 268fc477-d4ee-4ed4-88cd-648539397df2
[ { token: '268fc477-d4ee-4ed4-88cd-648539397df2' } ]
session object to be set
{ token: '268fc477-d4ee-4ed4-88cd-648539397df2' }
setting session for 268fc477-d4ee-4ed4-88cd-648539397df2 socket /#iEqqcIsBbATDs1a-AAAB
local reference after set
{ token: '268fc477-d4ee-4ed4-88cd-648539397df2',
socket: '/#iEqqcIsBbATDs1a-AAAB' }
realtime after set
[ {
token: '268fc477-d4ee-4ed4-88cd-648539397df2',
socket: '/#iEqqcIsBbATDs1a-AAAB'
} ]
公開gist、fうなぎもここでコメントしてください。 この質問が他の人にも役立つことを願っています。
編集 Lodash referenceはReturns the matched element, else undefined.
と表示されています。これは、クローンされたオブジェクトまたは照会されたオブジェクトへの参照が返されるかどうかはわかりません。
'.value()'を呼び出す必要がありますか?物事の束は怠惰に評価され、あなたがするまで解消されません。 – Casey
詳しくは '.value()'を参照してください。 – Marek
結果を得るには、 'session.value()'を呼び出す必要があると思います。 – Casey