javascript - 使用扩展运算符反应复制数组不起作用
问题描述
我正在使用 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;
}
请帮我看看我哪里错了
解决方案
问题是您正在创建一个空数组,而不是 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']=[];