JavaScript代码题--以及一些奇奇怪怪的发现

解析 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打印结果');//这个返回值就出乎意料----

    //看来的看看官网了----或哪位大神不吝赐教下---------打印错误

结果仍然是取得下标

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值