js获取嵌套数组,嵌套对象的值

2021-1-12 11:55:14 星期二

场景: 服务端会返回一大堆字段的定义列表, 比如 order_status: {-1: '异常', 1: '已下单', 2 : '发货中', 3:....}, 需要前端将汉字展示在页面中;  

原因:  如果数组或对象是多维的, 嵌套了很多层, 就需要写很多的中括号, 引号, 拼接符,去获取最终的值, 可读性太差, 容易绕晕

方案: 封装一个方法, 传入数组和点分的字符串, 即可获得想要的值

用法:

1 let obj = {'aa': {'xx':'cc', '0': 0, '1': '1', '-1': -1}}; 
2 getObjChild(obj, 'aa.xx');
3 getObjChild(obj, 'aa.0');
4 getObjChild(obj, 'aa.-1');

代码:

 1     //获取嵌套数组/对象中的值
 2     function getObjChild(obj, key, gap='.') {
 3         let tmp = {};
 4         let arr = key.split(gap); //将key拆成数组
 5 
 6         if (obj[arr[0]]) {
 7             tmp = obj[arr[0]];
 8             for (let i=1; i<arr.length; i++) { //逐层进入匹配查找
 9                 let is_found = false;
10                 if (typeof tmp === 'object') {
11                     for(let j in tmp) {
12                         if (j === arr[i]) {
13                             tmp = tmp[j];
14                             is_found = true;
15                             break;
16                         }
17                     }
18                 }
19 
20                 if (!is_found) {
21                     tmp = false;
22                     console.log('未找到 '+ arr[i]);
23                     break;
24                 }
25             }
26         } else {
27             console.log('未找到 '+ arr[0]);
28             tmp = false;
29         }
30 
31         return tmp;
32     }
原文地址:https://www.cnblogs.com/iLoveMyD/p/14266316.html