为了账号安全,请及时绑定邮箱和手机立即绑定

2018-7-11_《Javascript代码的小小疑问》

2018-7-11_《Javascript代码的小小疑问》

慕婉清6462132 2018-12-06 16:15:07
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 即可。

查看完整回答
反对 回复 2018-12-24
?
炎炎设计

TA贡献1808条经验 获得超4个赞

你这边为啥有2次循环  _obj[_keyArr[i]]这个第一层循环都是不一样的所以不会覆盖    但是_valArr[j]每次第二层循环完都是数组最后一位。   因为这是2层循环  6*6 次 

查看完整回答
反对 回复 2018-12-24
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

感谢关注。 我这样想:一个对象的key, value 分别对应(遍历的)两个数组值, 填充。

查看完整回答
反对 回复 2018-12-24
?
千万里不及你

TA贡献1784条经验 获得超9个赞

第二个数组填充为何每次都循环到低, 都用了let了...

查看完整回答
反对 回复 2018-12-24
?
月关宝盒

TA贡献1772条经验 获得超5个赞

@Coca-code: 和这个无关,第二个循环你是写死了又多少次,按你的这种用法好像不需要2次循环吧

for(let i = 0,l = _keyArr.length; i<l;i++){
            _obj[_keyArr[i]] = _valArr[i];

    }
查看完整回答
反对 回复 2018-12-24
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

第一个for循环,循环的是字母,第二个for循环的是数字;过程是先循环字母A,然后循环数字给A值,每循环一次数字给A重新赋一次值,从5循环到4,所以A最后的值是4,循环完A,再循环B,同样的道理,B最后的数字是也是4    所以都循环完,所有字母后跟的都是4

查看完整回答
反对 回复 2018-12-24
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

结果是对了。

错在“...每次都从5循环至4”, 为何不是“在5循环至4”过程中,把相应的值(_valArr[j])给对应赋上了呢?     

 

这是我一搞的。

查看完整回答
反对 回复 2018-12-24
  • 7 回答
  • 0 关注
  • 519 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信