js接收变量

var arr={

        defPrice:0.02,
        speList:[
            {
                pname:'规格',
                pid:67,
                subLs:[
                    {name:'大份',
                        pname:'规格',
                        isDef:1,
                        pid:67,
                        spid:67,
                        sid:68
                    },{sname:'中份',
                        pname:'规格',
                        pid:67,
                        spid:67,
                        sid:69
                    },{sname:'小份',
                        pname:'规格',
                        pid:67,
                        spid:67,
                        sid:70
                    },{sname:'特大份',
                        pname:'规格',
                        pid:67,
                        spid:67,
                        sid:83
                    }
                ]
            },{
                pname:'颜色',
                pid:71,
                subLs:[{
                        sname:'黄色',
                        pname:'颜色',
                        isDef:1,
                        pid:71,
                        spid:71,
                        sid:72
                    },{
                        sname:'黑色',
                        pname:'颜色',
                        pid:71,
                        spid:71,
                        sid:84
                    },{
                        sname:'白色',
                        pname:'颜色',
                        pid:71,
                        spid:71,
                        sid:85
                    }
                ]
            },{
                pname:'大小',
                pid:71,
                subLs:[{
                        sname:'大',
                        pname:'颜色',
                        isDef:1,
                        pid:71,
                        spid:71,
                        sid:72
                    }
                ]
            }
        ]
    }
    var diOne,diTwo,diThree
    for(var i=0;i<arr.speList.length;i++){
        for(var j=0;j<arr.speList[i].subLs.length;j++){
            if(arr.speList[0]!=undefined){
                diOne = arr.speList[0].subLs[j].isDef;
                console.log(diOne)
            }
            if(arr.speList[1]!=undefined){
                diTwo = arr.speList[1].subLs[j].isDef;
            }
            console.log(arr.speList[2])
            if(arr.speList[2]!=undefined){
                diThree = arr.speList[2].subLs[j].isDef;
                console.log(diThree)
            }
        }
    }

请问js怎么接收数组中的变量,为什么我到第二个的时候会报isDef为undefined?

阅读 2.5k
3 个回答
 subLs:[
    {name:'大份',
        pname:'规格',
        **isDef:1,**
        pid:67,
        spid:67,
        sid:68
    },{sname:'中份',
        pname:'规格',
        pid:67,
        spid:67,
        sid:69
        ....

很明显,第二个对象里面没有isDef这个属性,你取这个属性,肯定是undefined啦,尝试一下下面的代码看看

var isDefArr = [];
for(var i=0;i<arr.speList.length;i++){
    for(var j=0;j<arr.speList[i].subLs.length;j++){
        if(arr.speList[i].subLs[j].isDef){
            isDefArr.push(arr.speList[i].subLs[j].isDef);
            console.log(arr.speList[i].subLs[j].isDef)
        }
    }
}

你可以打断点看一下,第一次遍历时,i为0,arr.speList[i].length为4,arr.speList[0].subLs.length为1,所以j<4,当j为2时,就会报错了

是subLs[j].isdef 是不对的 不应该是j

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题