-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path24_underscore.js_deepGet.html
64 lines (54 loc) · 1.46 KB
/
24_underscore.js_deepGet.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<meta charset="utf-8">
<script type="text/javascript">
<!-- 今天我们来探讨一下获取深层次的属性 -->
var o = {
title:{
a:{
name:{
aaa:{
a:"Ken"
}
}
}
}
}
// 那我们如果要如何去遍历这个对象呢
// 当然我们可以使用递归的方式,、
// 但是我们有一种简单的方式,underscore.js也是使用这种方式是想的
// 首先我们把要遍历的键放在一个数据里面
var arr = ["title","a","name","aaa","a"]
for(var i=0;i<arr.length;i++){
o = o[arr[i]];
console.log(o);
// 总共遍历四次
}
// 当然我们也可以使用递归的方式
function callback(obj){
var res = null;
for(let key in obj){
if(typeof obj[key] ==="object"){
callback(obj[key]);
}else{
console.log(obj);
break;
}
}
}
(callback(o));//"ken"
// 在underscore.js 里面是这样实现的
var deepGet = function(obj, path) {
// path是一个数组包含所有键名的数组
// 获取他的数组的长度
var length = path.length;
for (var i = 0; i < length; i++) {
// 如果obj为null
// 则返回undefined
if (obj == null) return void 0;
// 否则就继续查找
obj = obj[path[i]];
}
// 最后返回obj或者undefined
return length ? obj : void 0;
};
console.log(deepGet(o,arr))
</script>