首页 > 解决方案 > 使用扩展运算符反应复制数组不起作用

问题描述

我正在使用 react js 状态我在我的状态名称jObj中有一个假数组我正在使用扩展运算符将它复制到变量副本中,然后使用函数expandArray更新jObj不知道为什么这里的复制变量更新是我的两个函数

 fakeMethod=()=>{
        let  jObj=[];
        jObj[0]=[];
        jObj[0]['id']=1;
        jObj[0]["title"]="parent Object";
        jObj[0]['parentId']=[];
        jObj[0]['options']=[];
        jObj[0]['options'][0]=[];
        jObj[0]['options'][0]['name']="Yes";
        jObj[0]['options'][0]['value']="yes";
        jObj[0]['options'][0]['id']=3;
        jObj[0]['options'][1]=[];
        jObj[0]['options'][1]['name']="No";
        jObj[0]['options'][1]['value']="no";
        jObj[0]['options'][1]['id']=4;
        jObj[1]=[];
        jObj[1]['id']=1;
        jObj[1]["title"]="child Object";
        jObj[1]['parentId']=[3,4];
        jObj[1]['options']=[];

        const copy=[...jObj]
        jObj=this.expandArray(jObj);
        console.log("This is orignal object")
        console.log(jObj);
        console.log("This is copy object")
        console.log(copy)
        return ""
    }
    expandArray=(input)=>{
        let result = input.map(a => a.id);
        var max_of_array = Math.max.apply(Math, result);
        var newArr = [];
        for (var i in input) {
            var first = true;
            let objCopy = Object.assign({}, input[i].parentId);
            input[i]=Object.assign(input[i],{"initObjectPos":i});
            if(input[i].parentId.length == 0){
                input[i].parentId="";
            }
            for (var x in objCopy) {
                var y = input[i];

                if (!first) {
                    y = Object.assign({}, y);
                    max_of_array++;
                    y.id = max_of_array.toString();
                    newArr.push(y);
                }
                y.parentId = objCopy[x];
                first = false;
            }
        }
        var output = input.concat(newArr);
        return output;
    }

请帮我看看我哪里错了

标签: javascriptarraysjsonreactjs

解决方案


问题是您正在创建一个空数组,而不是 fakeMethod() 中的对象数组。如果您查看以下代码,您会发现创建 jObj[0], jObj[1], jObj[0]['options'][0]; 时的错误

    let  jObj=[];
    jObj[0]={};
    jObj[0]['id']=1;
    jObj[0]["title"]="parent Object";
    jObj[0]['parentId']=[];
    jObj[0]['options']=[];
    jObj[0]['options'][0]={};
    jObj[0]['options'][0]['name']="Yes";
    jObj[0]['options'][0]['value']="yes";
    jObj[0]['options'][0]['id']=3;
    jObj[0]['options'][1]={};
    jObj[0]['options'][1]['name']="No";
    jObj[0]['options'][1]['value']="no";
    jObj[0]['options'][1]['id']=4;
    jObj[1]={};
    jObj[1]['id']=1;
    jObj[1]["title"]="child Object";
    jObj[1]['parentId']=[3,4];
    jObj[1]['options']=[];

推荐阅读