想实现的目的
遍历一个数组,数组的元素是对象,是一个树形结构。如果数组元素的PID是某个值,就将该元素的checked属性设为true
for(var i=0;i<initdata.length;i++){
if($.inArray(initdata[i].id, subjectids) > -1){
initdata[i].checked=true;
if(parseInt(initdata[i].isleaf) === 0){
initdata = checkNode(initdata,initdata[i].id);
}
}else{
initdata[i].checked=false;
}
}
function checkNode(initdata,pid){
for(var j=0;j<initdata.length;j++){
if(parseInt(initdata[j].pid) === parseInt(pid)){
initdata[j].checked = true;
}
}
return initdata;
}
数据结构如下
0:
checked: true
id: "5001"
isleaf: "0"
level: "1"
name: "主营业务收入"
open: true
pid: "5"
__proto__: Object
1:
checked: false
id: "500101"
isleaf: "1"
level: "2"
name: "服务收入"
open: true
pid: "5001"
__proto__: Object
2:
checked: false
id: "500102"
isleaf: "1"
level: "2"
name: "销售收入"
open: true
pid: "5001"
__proto__: Object
3:
checked: true
id: "5051"
isleaf: "1"
level: "1"
name: "其他业务收入"
open: true
pid: "5"
__proto__: Object
直接操作initdata,最后的结果,checked没有被设置为true【数据没有问题】
希望大神指点,大概知道是JS的深拷贝,浅拷贝的问题,不知道怎么解决
把else代码去掉就好了,本来for循环的第一次,四条数据都被改为true了,但是接着第二条数据经过if($.inArray(initdata[i].id, subjectids) > -1)判断为false,所以被else 重新将checked 值改为了false.数据本身值就是false,所以把这个去掉,既满足需求,也就解决了问题