:在写项目中需要用到循环对象的键值名,用for in是个不错的选择,在开发过程中没怎么注意,因为逻辑是没问题的,但是在最终测试阶段却遇上了大问题
例子
let arr={
aa:{
bb:22
},
cc:{
bb:33
},
tt:{
bb:66
}
}
let brr = {
dd:{
bb:22
},
ff:{
bb:33
},
}
let value
function forin(val){
for (let key in arr) {
console.log(val.bb, arr[key].bb);
if (arr[key].bb==val.bb) {
return key
}else{
return false
}
}
}
function fn1(){
for (let key in brr) {
value= forin(brr[key])
}
}
fn1()
打印居然是这样的
明明循环中的对象有三个值应该是这样的
22 22
22 33
22 66
33 22
33 33
33 66
原因分析:
但是不知为何原因只跑了两次,两次循环的值都是第一个,在我写的屎山一样的代码中找了很久才发现居然是if判断中return 会立即中断循环。
解决方案:
声明一个变量赋值,在循环外再return
function forin(val){
let srting
for (let key in arr) {
console.log(val.bb, arr[key].bb);
if (arr[key].bb==val.bb) {
srting = key
}
}
return srting
}
以上