json/Array 多维取值

2017-05-26  本文已影响0人  进击的大牛

有个朋友,问过一个问题,我是很排斥使用递归方式拿值,不过似乎没什么好的解决方案,索性就这个吧,大量数据,,,可能需要一些更高深的算法吧,不过对于面试者来说,还好。

从一堆json中拿到value这个值,这个值是数据

 var m =[{value:{value:[{value:"5"}]}},{value:"333"},{name:[{value:"4444"}]}];
   function getToJson(obj,val){
       var res =[]; //定义递归
       function getAllValue(json,name){
           for(var key in json) {
               if (typeof json[key] != "object") {
                   if (key == name) {
                       //console.log(json[key]);
                       res.push(json[key]); //将递归值,存在数组中
                   }
               }
               else {
                   getAllValue(json[key], name);
               }
           }
       }
       getAllValue(obj,val);
       return res;  //返回这个数组
   }
   alert(getToJson(m,"value"));

看了上面那个例子,就联想一下所谓的数组平坦化,多维数组变成一维,代码是这样的

数组平坦化

 var arr =[[1,3],[3,4,[5,[{nsmr:"sss"}]]]];
   function Arr(tar) {
       var result =[];
       //alert(tar[0] instanceof Array) ;
       //递归的方法
       function duiguiArr(tar){
           for(var i =0;i<tar.length;i++){
               if(!(tar[i] instanceof Array)){
                   result.push(tar[i])
               }else{
                   duiguiArr(tar[i]);
               }
           }
       }
       duiguiArr(tar);
       return result;
   }
   alert(Arr(arr));

javascript这门语言还是很强的,除了上面那个递归解决方案。还有更牛的解决方案

数组平坦化解决方案 二

    var arr =[[1,3],[3,4,[5,[{nsmr:"sss"}]]]];
    var s =arr.join(",").split(",");
    console.log(s)
上一篇 下一篇

猜你喜欢

热点阅读