Javascript 使用递归函数遍历JSON字符串到内部级别
我有一个JSON输入,可以进入任意级别 我提供了一个输入样本Javascript 使用递归函数遍历JSON字符串到内部级别,javascript,arrays,json,object,Javascript,Arrays,Json,Object,我有一个JSON输入,可以进入任意级别 我提供了一个输入样本 var d=getEntities({“类别”: { “方面”: [ { “计数”:1, “实体”:“公司”, “公司”: [ { “实体”:“福特汽车公司”, “福特汽车公司”: [ { “计数”:1, “实体”:“福特” } ] } ] }, { “计数”:4, “实体”:“国家”, “国家”:[ { “实体”:“德国”, “德国”:[ { “计数”:1, “实体”:“德国” } ], “货币”:“欧元(EUR)” }, { “实
var d=getEntities({“类别”:
{
“方面”:
[
{
“计数”:1,
“实体”:“公司”,
“公司”:
[
{
“实体”:“福特汽车公司”,
“福特汽车公司”:
[
{
“计数”:1,
“实体”:“福特”
}
]
}
]
},
{
“计数”:4,
“实体”:“国家”,
“国家”:[
{
“实体”:“德国”,
“德国”:[
{
“计数”:1,
“实体”:“德国”
}
],
“货币”:“欧元(EUR)”
},
{
“实体”:“意大利”,
“意大利”:[
{
“计数”:1,
“实体”:“意大利”
}
],
“货币”:“欧元(EUR)”
},
{
“实体”:“日本”,
“日本”:[
{
“计数”:1,
“实体”:“日本”
}
],
“货币”:“日元(日元)”
},
{
“实体”:“韩国”,
“韩国”:[
{
“计数”:1,
“实体”:“韩国”
}
],
“货币”:“韩元(韩元)”
}
]
},
{“计数”:5,
“实体”:“人”,
“人”:[
{
“计数”:2,
“实体”:“道奇”
},
{
“计数”:1,
“实体”:“道奇复仇者”
},
{
“计数”:1,
“实体”:“大联盟”
},
{
“计数”:1,
“实体”:“Sterling Heights”
}
]
}
]
}});
我想使用递归将所有级别的键值“Entity”添加到数组中
我能够使用字符串从第一级收集数据
var testJSON={“类别”:
{
“方面”:
[
{
“计数”:1,
“实体”:“公司”,
“公司”:
[
{
“实体”:“福特汽车公司”,
“福特汽车公司”:
[
{
“计数”:1,
“实体”:“福特”
}
]
}
]
},
{
“计数”:4,
“实体”:“国家”,
“国家”:[
{
“实体”:“德国”,
“德国”:[
{
“计数”:1,
“实体”:“德国”
}
],
“货币”:“欧元(EUR)”
},
{
“实体”:“意大利”,
“意大利”:[
{
“计数”:1,
“实体”:“意大利”
}
],
“货币”:“欧元(EUR)”
},
{
“实体”:“日本”,
“日本”:[
{
“计数”:1,
“实体”:“日本”
}
],
“货币”:“日元(日元)”
},
{
“实体”:“韩国”,
“韩国”:[
{
“计数”:1,
“实体”:“韩国”
}
],
“货币”:“韩元(韩元)”
}
]
},
{“计数”:5,
“实体”:“人”,
“人”:[
{
“计数”:2,
“实体”:“道奇”
},
{
“计数”:1,
“实体”:“道奇复仇者”
},
{
“计数”:1,
“实体”:“大联盟”
},
{
“计数”:1,
“实体”:“Sterling Heights”
}
]
}
]
}};
功能扫描(obj)
{
var-k;
if(对象hasOwnProperty(“实体”)){
用于(obj中的k){
if(对象hasOwnProperty(k)){
扫描(obj[k]);
}
}
}
否则{
if(k=='entity')
{
警报(对象实体);
}
}
};
扫描(testJSON);
怎么
(function recur( obj ) {
Object.keys( obj ).forEach( function( prop ) {
// Check if the property is an object
if ( ({}).toString.apply( prop ) === '[object Object]' ) {
// If it is, recall this function
recur( prop );
}
} );
} () );
function scan(obj) {
var k;
if (obj instanceof Object) {
for (k in obj){
if (obj.hasOwnProperty(k)){
//recursive call to scan property
scan( obj[k] );
}
}
} else {
//obj is not an instance of Object so obj here is a value
};
};
var aObject = {
items: [],
children: {}
}
var aObject = {
items: [],
children: {
"subgroup1": {
items: [],
children: {}
},
"subgroup2": {
items: [],
children: {}
}
}
}
["subgroup1", "subgroup1a"]
aObject.children[array[0]].children[array[1]].items
function recursive(aLevel, aItem, aArray, aIndex){
var lLevel = aLevel;
// If we have reached the end of the array
if (aIndex === aArray.length){
// Insert
aLevel.items.push(aItem);
} else {
// If the subgroup doesn't exist, create it
if (typeof aLevel.children[aArray[aIndex]] === 'undefined'){
aLevel.children[aArray[aIndex]] = {
items: [],
children: {}
};
}
// Move into
recursive(aLevel.children[aArray[aIndex]], aItem, aArray, aIndex+1);
}
}
aObject = {
items: [],
children: {},
}
angular.forEach(items, function(item, i){
var location = item.location;
if (location.length == 0){
aObject.items.push(item);
} else {
recursive(aObject, item, location, 0);
}
});
var aObject = {
items: [],
children: {
"subgroup1": {
items: [],
children: {
"subgroup1a": {
items: [item],
children: {}
}
}
},
"subgroup2": {
items: [],
children: {}
}
}
}
var recursiveObjMap = (function(){
var stack = [];
var result = [];
// var bail = false;
return function map(data, key){
if (!$.isArray(data) && !$.isPlainObject(data) ) {
result.push(data);
return false
}
$.each(data, function(i, v){
if (key) stack.push(key);
map(v, i);
stack.pop();
});
return result;
};
})();
recursiveObjMap({a:'b',c:{d:{e:"f"}}}) // ['b', 'f']
const obj = [
{
count: 1,
entity: "Company",
Company: [
{
entity: "Ford Motor Co",
Ford_Motor_Co: [
{
count: 1,
entity: "Ford",
},
],
},
],
},
{
count: 4,
entity: "Country",
Country: [
{
entity: "Germany",
Germany: [
{
count: 1,
entity: "Germany",
},
],
currency: "Euro (EUR)",
},
{
entity: "Italy",
Italy: [
{
count: 1,
entity: "Italy",
},
],
currency: "Euro (EUR)",
},
{
entity: "Japan",
Japan: [
{
count: 1,
entity: "Japan",
},
],
currency: "Yen (JPY)",
},
{
entity: "South Korea",
South_Korea: [
{
count: 1,
entity: "South Korea",
},
],
currency: "Won (KRW)",
},
],
},
{
count: 5,
entity: "Persons",
Persons: [
{
count: 2,
entity: "Dodge",
},
{
count: 1,
entity: "Dodge Avenger",
},
{
count: 1,
entity: "Major League",
},
{
count: 1,
entity: "Sterling Heights",
},
],
},
];
function test(runObj) {
for (let i in runObj) {
typeof runObj[i] == "object" ? test(runObj[i]) : console.log(runObj[i]);
}
}
test(obj);