Javascript 使用过滤器方法修改数组元素

Javascript 使用过滤器方法修改数组元素,javascript,vue.js,pusher,Javascript,Vue.js,Pusher,我正在尝试使用.filter()方法修改Vue.js中列表中的元素。新元素来自Pusher。我正在侦听事件并尝试更新元素,如下所示: users.filter((obj)=>{ Echo.private(`user.${obj.id}`)。listen(`userupdated',(e)=>{ return obj=e.user;//或return e.user;也不起作用 }); }); 这不管用。这两个对象在结构上是相同的,但通过Pusher传递的新对象包含更新的信息 另一方面,当我尝试修

我正在尝试使用
.filter()
方法修改Vue.js中列表中的元素。新元素来自Pusher。我正在侦听事件并尝试更新元素,如下所示:

users.filter((obj)=>{
Echo.private(`user.${obj.id}`)。listen(`userupdated',(e)=>{
return obj=e.user;//或return e.user;也不起作用
});
});
这不管用。这两个对象在结构上是相同的,但通过Pusher传递的新对象包含更新的信息

另一方面,当我尝试修改属性时,它会起作用:

users.filter((obj)=>{
Echo.private(`user.${obj.id}`)。listen(`userupdated',(e)=>{
返回obj.name=e.user.name;
});
});
我做错了什么?不允许这样替换整个元素吗?

根据过滤器的功能,这是:

filter()方法使用通过的所有元素创建一个新数组 由提供的函数实现的测试

因此,您所做的基本上是以错误的方式使用过滤器。 您应该做的是在事件上对旧数组进行迭代,并在执行时对其进行更新


我的建议是:在一个事件中,使用新的值和位置调用一个函数来替换它,然后以编程方式处理它

我正在尝试使用
.filter()
方法修改Vue.js中列表中的元素。对于
filter
@Psidom来说,这听起来不是一个很好的用例,谢谢你的评论。你能推荐一个更好的订阅多推频道的方法吗?一个简单的for循环就可以了?使用索引修改原始数组?
obj.name
有效,因为
obj
本身是指向对象的引用,因此您可以通过执行
obj.name=e.user.name
来修改基础对象。当使用
obj=e.user
时,您正在覆盖
obj
变量,该变量不会影响原始数组中存储的引用。@Rehmat修改属性时,如果不使用
返回值
,也会起到同样的作用。您没有从该回调返回到外部函数,因为返回不起作用。我关心的是,如果这是实现结果的错误方法,那么为什么
return obj.name=e.user.name
正在工作?@Rehmat这是一种你正在使用的黑客技术,它允许你在移动中修改对象的属性,但这不应该是那种方式,你是对的,它正在工作,但显然不是适当的行为。对象属性可以修改,但它的变量引用与带有常量关键字的对象不同,您可以更改它的属性,但不能指定新对象。我正在投票表决答案。非常感谢。p、 美国将等待更好的答案,如果我没有得到更好的答案,我会将其标记为已接受。@Rehmat这太好了,再次感谢您,使您的代码模块化,使其成为专门处理事件数组的函数。如果您想更好地解释对象的属性赋值是如何工作的,而不是整个对象的重新赋值不起作用,我认为您应该查找对象初始化,它的存储和行为,也许可以查看对象在使用const关键字创建后是如何工作的,都一样behaviour@Rehmat查看此项了解有关Obj行为的更多信息: