有個(gè)朋友未巫,問過一個(gè)問題,我是很排斥使用遞歸方式拿值启昧,不過似乎沒什么好的解決方案橱赠,索性就這個(gè)吧,大量數(shù)據(jù)箫津,狭姨,宰啦,可能需要一些更高深的算法吧,不過對于面試者來說饼拍,還好赡模。
從一堆json中拿到value這個(gè)值,這個(gè)值是數(shù)據(jù)
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]); //將遞歸值师抄,存在數(shù)組中
}
}
else {
getAllValue(json[key], name);
}
}
}
getAllValue(obj,val);
return res; //返回這個(gè)數(shù)組
}
alert(getToJson(m,"value"));
看了上面那個(gè)例子漓柑,就聯(lián)想一下所謂的數(shù)組平坦化,多維數(shù)組變成一維叨吮,代碼是這樣的
數(shù)組平坦化
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這門語言還是很強(qiáng)的辆布,除了上面那個(gè)遞歸解決方案。還有更牛的解決方案
數(shù)組平坦化解決方案 二
var arr =[[1,3],[3,4,[5,[{nsmr:"sss"}]]]];
var s =arr.join(",").split(",");
console.log(s)