如何不创建变量直接修改数组中匹配条件的对象属性?
正确实现方式
你可以通过以下几种方式实现不创建外部/全局变量且完成赋值的需求:
方法1:使用可选链操作符(推荐)
利用可选链?.直接访问匹配对象的属性,找不到匹配项时会静默失败,不会抛出错误,代码最简洁:
let clientOnline = [{num:4},{num:1},{num:3}]; clientOnline.find(cli => cli.num === 4)?.num = 0;
方法2:在if条件中声明临时变量(精准控制作用域)
ES2021及以上支持在if条件里声明变量,这个变量仅在if代码块内有效,不会污染外部作用域,完全符合你自主控制变量生命周期的需求:
let clientOnline = [{num:4},{num:1},{num:3}]; if (const match = clientOnline.find(cli => cli.num === 4)) { match.num = 0; }
方法3:短路求值(避免重复遍历)
用逻辑与&&的短路特性,仅在找到匹配对象时执行赋值操作,注意不要重复调用find(会额外遍历数组):
let clientOnline = [{num:4},{num:1},{num:3}]; const match = clientOnline.find(cli => cli.num === 4); match && (match.num = 0);
如果在局部作用域(比如函数内部)声明match,它的生命周期会被严格限定,不会造成冗余。
你的期望代码问题说明
你写的if(clientOnline.find(cli=>cli['num']===4)) this['num']=4存在逻辑错误:这里的this并不是find返回的匹配对象,this的指向由当前执行上下文决定,无法直接指代找到的目标对象,必须直接操作find返回的结果。
内容的提问来源于stack exchange,提问作者Push
相关产品推荐
相关产品推荐

