利用递归遍历
先看个例子
<script>
var data = [{
id:1,
name:'家电’,
goods:[{
id:11,
name:冰箱;
},{
id:12,
name:'洗衣机‘;
}]
},{
id:2,
name:'服饰'
}] ;
//想要输入id号,就可以返回不同的数据对象
//1.利用forEach去遍历里面的每一个对象
function getID(json,id) {
var o= {}
json.forEach(function(item){
if(item.id == id) {
//console.log(item);
o = item;
//2.想要里层的11,12可以利用递归函数
//里面有数组且数组的长度不为0;
}else if (item.goods && item.goods.length > 0){
o = getID(item.goods,id);
}
return o;
})
}
getID(date,1);
</script>
浅拷贝和深拷贝
- 浅拷贝只是拷贝一层,更深层次的对象级别的只拷贝引用;
- 深拷贝拷贝多层,每一级别的数据都会被拷贝
- Object.assign(target,…sources)可浅拷贝
var object= {
id:1;
name='小楠楠’;
msg {
age:18
}
};
var o = {};
for (var k in obj) {
//k是属性名,obj[k]属性值
o[k] = obj[k];
}
console.log(o);
//会覆盖
o.msg.age = 20;
console.log(obj);//20
//换个新方法
Object.assign(o,object);
console.log(0);
o和obj里面的msg指向的是同一个地址,如果修改o里面的msg就会影响obj里面的msg
深拷贝
深拷贝是把obj开辟的一个空间拷贝一份,在把拷贝完的这个给o,形成两个互不干扰的空间。
var object= {
id:1;
name='小楠楠’;
msg {
age:18
}
};
var o = {};
//要实现的话考虑函数递归
//让我们封装一个函数吧
funtion deepCopy(newobj,oldobj) {
for (var k in object){
//判断属性值属于那种类型的数据
//1.获取属性值 oldobject[k]
var item = object[k];
//2.判断是否属于数组
if (item instanceof Array) {
newobject[k] = [];//等价于o.color = [];
deepCopy(newobj[k],item);//把属性值给属性名
}else if (item instanceof Object){
//3.判断这个值是否属于对象
newobj[k] = {};
deepcopy(newobj[k],item);
}else if {
newobj[k]=item;
}
}
}
deepCopy(o,obj);
console.log(o);
这里的递归函数在传递参数的时候,是把值item给属性newobj[k],另外数组要写在oject上面,因为数组也属于object