【发布时间】:2016-07-05 23:33:22
【问题描述】:
我使用 lodash find 从数组中查询对象,然后我设置了该对象的属性,但是当我在设置此属性后打印出数组时,它没有改变。
我会感谢在 JavaScript 中使用 lodash 处理对象方面更有经验的人提供的一些 cmets。也可以随意评论我提出问题的方式或编辑内容以使其更容易通过搜索引擎被其他人搜索。
隔离代码:
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,也可以在这里发表评论。 我希望这个问题对其他人也有用。
编辑
Lodash reference 说 Returns the matched element, else undefined. 我不确定这是否意味着它返回克隆对象或对查询对象的引用。
【问题讨论】:
-
您需要拨打
.value()吗?一堆东西被懒惰地评估,直到你这样做才会解决。 -
请详细点,
.value()在哪个对象上,用它来设置属性值? -
我的意思是要获得结果,我认为您需要致电
session.value()。 -
您的意思是处理(解决)
promise?结果是因为yield关键字解决的,我use strict环境和代码在promise里面。 -
哦。好吧,这就是我没有仔细阅读的结果。抱歉,继续。
标签: javascript node.js lodash co