10086 get(object, 'a[100].b.c', 10086); ``` 问题追问: **1. 如何使用 ts 写法来实现 lodash.get 函数?**">
极客时间对于推广渠道会有返利优惠,比如山月在极客时间买了一门课,再把课程分享给好友购买,这时极客时间会向山月返利20元左右。
而我现在做了一个返利平台,你可以在上边通过山月的链接购买课程,此时极客时间会向我返利。为了共同学习,而你可以添加我的微信 (shanyue94),我将把极客时间给我的返利发一个红包全部返给你

# 如何实现类似 lodash.get 函数

更多描述

使用 get 函数可避免长链的 key 时获取不到属性而出现问题,此时进行异常避免时及其服务,如 o.a && o.a.b && o.a.b.c && o.a.b.c.d

实现类似lodash.get (opens new window),有以下测试用例:

const object = { 'a': [{ 'b': { 'c': 3 } }] };
 
//=> 3
get(object, 'a[0].b.c');

//=> 3
get(object, 'a[0]["b"]["c"]')

//=> 10086
get(object, 'a[100].b.c', 10086);

问题追问:

1. 如何使用 ts 写法来实现 lodash.get 函数?

Issue

欢迎在 Issue 中交流与讨论: Issue 199 (opens new window)

Author

回答者: miaooow (opens new window)

function lodashGet(obj,exps){ if(typeof exps !== 'string') return obj if(typeof obj !== 'object') return obj let res = obj const arr = exps.split('.') for(let i=0;i<arr.length;i++){ const exp = arr[i] if(res[exp]){ res = res[exp] } else{ return undefined } } return res }

var obj = {test:{arr:[{name:1}]}}

lodashGet(obj,'test.arr.0.name')

关于山月

我的项目:
我的微信:shanyue94,欢迎交流
Last Updated: 7/31/2021, 3:04:10 PM