![](/img/trans.png)
[英]JavaScript | Iterate through JSON Object and get all the values for a specific key
[英]Recursively pass through Json to get all values for a specific key
我有一個看起來像這樣的json對象:
var testJ = {"ROOT":{
dir : 'app',
files : [
'index.html',
{
dir : 'php',
files: [
'a.php',
{
dir : 'extras',
files : [
'a.js',
'b.js'
]
}
]
}
]
}};
我需要提取所有文件並追加到數組中(index.html,a.php,a.js..etc)
為此,我編寫了一個JavaScript代碼,如下所示:
var arr=[];
function scan(obj,append)
{
var k;
if (obj instanceof Object) {
for (k in obj){
if (obj.hasOwnProperty(k)){
if(k=='files')
{
scan( obj[k],1 );
}
}
}
} else {
body += 'found value : ' + obj + '<br/>';
if(append == 1)
arr.push(obj);
alert("Arr"+ arr);
};
};
scan(testJ,0);
我無法弄清楚我要去哪里。 可以給我一些指示嗎?
var res = [];
function gather(j) {
for (var k in j) {
if (k === 'files') {
addFiles(j[k]);
} else if (typeof j[k] === 'object') {
gather(j[k]);
}
}
}
function addFiles(f) {
for (var i = 0; i < f.length; i++) {
if (typeof f[i] === "string") {
body += 'found value : ' + obj + '<br/>';
res.push(f[i]);
} else {
gather(f[i]);
}
}
}
gather(testJ);
免費提示:
instanceof
是一些有毒的東西。 為什么instanceof對某些文字返回false?
始終,總是使用===
進行比較,而不是==
我也不會盲目使用hasOwnProperty
除非您擔心所操作的東西可能具有經過修改的原型, https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/為了...只是為了簡單。
地圖縮小方法怎么樣?:
function mapJ(subject) {
return subject.files.map(function(item) {
if (typeof item === "string") {
return item;
} else {
return parseJ(item);
}
});
}
function reduceJ(subject) {
return subject.reduce(function(prev, cur) {
return prev.concat(cur);
}, []);
}
function parseJ(subject) {
return reduceJ(mapJ(subject));
}
var result = parseJ(testJ));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.