lodashfind
を使用して配列からオブジェクトをクエリし、そのオブジェクトのプロパティを設定しますが、このプロパティを設定した後に配列を出力すると、変更されません。
JavaScript で lodash を使用してオブジェクトを処理する経験が豊富な人からのコメントに感謝します。また、私が問題を作成する方法についてコメントしたり、検索エンジンを介して他の人がより簡単に検索できるようにコンテンツを編集したりすることもお気軽にどうぞ.
分離されたコード:
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'
} ]
Public Gist、ここにもコメントしてください。この質問が他の人にも役立つことを願っています。
Edit Lodash referenceReturns the matched element, else undefined.
は、それがクローンされたオブジェクトまたはクエリされたオブジェクトへの参照を返すことを意味するかどうかわからないと言っています。