最近在写后台管理系统,遇到一个多种类型报价的功能,内容不难,但是需要各种判断加处理。有时候就会不小心出现犯傻的情况。。。
1.场景
需要在一个对象数组中过滤出符合条件的对象。
let arr = [{
id:7,
code:'ZP001',
selectCode:'ABCD'
},{
id:8,
code:'ZP002',
selectCode:'EFGH'
}]
从上面的数组中查找出code='ZP002'
的内容。
办法很简单:就是通过数组的filter
过滤方法
let obj = arr.filter(item=>item.code=='ZP002')[0];
此时的obj
就是符合条件的对象了。
但是我这边发现,使用过滤方法后,数组中的每一项的code
都变成了ZP002
,这就导致最后我拿到的obj
永远是数组的第一项,出现了错误。
2.出现问题:过滤方法后,数组中的每一项的
code都一样了
此时的arr
打印出来是[{ id:7, code:'ZP002', selectCode:'ABCD' },{ id:8, code:'ZP002', selectCode:'EFGH' }]
3.发现问题
数组的fiiter
过滤方法是不会改变原数组的,但是目前出现了原数组改变的情况,百度后发现,也有人跟我遇到同样的问题:
我这边是属于第二种情况:
我实际写的过滤代码如下:
let obj = arr.filter(item=>item.code='ZP002')[0];
少写了一个=
,。。。。
深浅拷贝的问题也有可能导致这种情况的发生。所以一定要注意。
完成!!!