function fn(num){
let _keyArr = ['A','B','C','D','K','Y'];
let _valArr = num.toString().split('');
let _obj = {};
for(let i = 0,l = _keyArr.length; i<l;i++){
//console.log(_keyArr[i]);
for(let j = 0, l = _valArr.length; j<l;j++){
//console.log(_valArr[j]);
_obj[_keyArr[i]] = _valArr[j];
}
}
console.log(_obj);
};
fn(532694); //为何值都是 “4”??
7 回答
狐的传说
TA贡献1804条经验 获得超3个赞
一次循环就行,第二个循环里,因为尾数是4,4总会覆盖之前的值,想要一一对应有两者做法:
1.只用一个循环
function fn(num){ let _keyArr = ['A','B','C','D','K','Y']; let _valArr = num.toString().split(''); let _obj = {}; for(let i = 0,l = _keyArr.length; i<l;i++){ _obj[_keyArr[i]] = _valArr[i]; } console.log(_obj); }; fn(532694);
2.第二个循环里判断一下索引是否一对一
function fn(num){ let _keyArr = ['A','B','C','D','K','Y']; let _valArr = num.toString().split(''); let _obj = {}; for(let i = 0,l = _keyArr.length; i<l;i++){ //console.log(_keyArr[i]); for(let j = 0, l = _valArr.length; j<l;j++){ if(i==j){ _obj[_keyArr[i]] = _valArr[j]; } } } console.log(_obj); }; fn(532694);
其实一次就可以了,之所以给出第二个方法是想表达只有在索引是一对一的情况下才是你想要的结果,如果没有 i==j,那么在第二个循环里最后的4始终会覆盖前面的值,这就是为什么值都是4的原因。加个判断,或者,就用一个循环,索引都是i 即可。
炎炎设计
TA贡献1808条经验 获得超4个赞
你这边为啥有2次循环 _obj[_keyArr[i]]这个第一层循环都是不一样的所以不会覆盖 但是_valArr[j]每次第二层循环完都是数组最后一位。 因为这是2层循环 6*6 次
月关宝盒
TA贡献1772条经验 获得超5个赞
@Coca-code: 和这个无关,第二个循环你是写死了又多少次,按你的这种用法好像不需要2次循环吧
for(let i = 0,l = _keyArr.length; i<l;i++){ _obj[_keyArr[i]] = _valArr[i]; }
哆啦的时光机
TA贡献1779条经验 获得超6个赞
第一个for循环,循环的是字母,第二个for循环的是数字;过程是先循环字母A,然后循环数字给A值,每循环一次数字给A重新赋一次值,从5循环到4,所以A最后的值是4,循环完A,再循环B,同样的道理,B最后的数字是也是4 所以都循环完,所有字母后跟的都是4
添加回答
举报
0/150
提交
取消