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