解析 let a={b:10,c:{d:[11,12],e:13}}
,实现 10+11+12+13
效果
解
const a={b:10,c:{d:[11,12],e:13}}
function sum(obj) {
let total = 0;
const value = Object.values(obj)
value.forEach(item=>{
total += typeof item === 'number' ? item : sum(item)
})
return total
}
const s = sum(a) //
console.log('数值之和是', s)
------------------------------------------------------------------
写的时候,是准备再判断一次,递归进来的是不是数组,结果发现打印得到了,和
觉得很奇怪,Object.values直接取数组不报错,或者说可以取到数组值么
所以做了测试
发现,他会返回原数组,而且是浅拷贝(也算是取到了,本身会返回数组)
然后又试试能不能取key呢,所以结果取到了索引,而且是数组内索引是字符串
然后想着Object.values可以实现浅拷贝,那么会不会对多维数组解构平铺呢
结果还是得到了原数组,下面是打印代码,以及结果
const arr = [12,13,15]
const key= Object.keys(arr)
const neArr= Object.values(arr)
neArr[0]=99
console.log(neArr,'---数组使用value');//返回原数组//且是浅拷贝
console.log(key,'---数组使用key');//取到索引且是字符串
const arr2 = [12,13,15,[19,[85]]]
const newArr2 =Object.values(arr2)
arr2[3][0]=88//尝试性这么写,也可以选中下表3的元素---且把19改为88 //任然是浅拷贝
console.log(newArr2,'----newArr2打印结果');
控制台打印结果
const arr2 = [12, 13, 15, [19, [85]]]
const newArr2 = Object.values(arr2)
const newArrKey = Object.keys(arr2)
arr2[3][0] = 88//尝试性这么写,也可以选中下表3的元素---且把19改为88 //任然是浅拷贝
console.log(newArr2, '----newArr2打印结果');
console.log(newArr2, '----newArrKey打印结果');//这个返回值就出乎意料----
//看来的看看官网了----或哪位大神不吝赐教下