面试题:通过连写参数方式获取object的值

下面代码实现通过’a.b.c’连写的方式实现object的取值:getValue(obj, ‘a.b.c’ // {name: ‘Martin’})

代码

const obj = {
   a: {
     b: {
       c: {
         name: 'Martin'
       }
     }
   }
 }
// 函数封装
function getValue(obj, keys) {
   if (typeof keys !== 'string') {
     throw new Error('参数类型错误')
   }
   const list = keys.split('.')
   const len = list.length

   for(let i = 0; i < len; i++) {
     const item = obj[list[i]]
     if ( item !== undefined) {
       obj = item
     } else {
       throw new Error('参数路径有误')
     }
   }

   return obj
 }
 // 原型上封装
 Object.prototype.getValue = function (keys) {
   if (typeof keys !== 'string') {
     throw new Error('参数类型错误')
   }
   const list = keys.split('.')
   const len = list.length

   let newObj = this
   for(let i = 0; i < len; i++) {
     const item = newObj[list[i]]
     if ( item !== undefined) {
       newObj = item
     } else {
       throw new Error('参数路径有误')
     }
   }

   return newObj
 }
// 输出结果
console.log(getValue(obj, 123))      // 报错:参数类型错误
console.log(getValue(obj, 'a.b.e'))  // 报错:参数路径有误
console.log(getValue(obj, 'a.b.c'))  // {name: 'Martin'}

console.log(obj.getValue(123))       // 报错:参数类型错误
console.log(obj.getValue('a.b.e'))   // 报错:参数路径有误
console.log(obj.getValue('a.b.c'))   // {name: 'Martin'}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值