好吧,我有这个JSON文件
{
"status": "success",
"message": {
"affenpinscher": [],
"african": [],
"airedale": [],
"corgi": [
"cardigan"
],
"akita": [],
"appenzeller": [],
"basenji": [],
"beagle": [],
"bluetick": [],
"borzoi": [],
"bouvier": [],
"boxer": [],
"brabancon": [],
"briard": [],
"bulldog": [
"boston",
"french"
]
}
}
我需要遍历列表并检查品种的数组是否为空。
我过去曾使用过JSON文件,但这些列表通常都在某种形式的Arraylist中,这让我可以简单地遍历它,但我不确定我是什么应该在这种情况下做。
有没有办法选择所有"孩子"消息。
这是我到目前为止所做的。
$.getJSON("https://dog.ceo/api/breeds/list/all", function (resp) {
var doglist = $('#doglist');
$.each(resp.message, function(dog) {
var dog1 = resp.message;
doglist.append('<li>' + dog + '</li>')
var subdog = Object.keys(dog1).length;
console.log(subdog);
});
});
我可能不够清楚。
在我的代码段中,有一个
var subdog = Object.keys(dog1).length;
按预期返回15。
我需要的是做一些像
这样的事情var subdog = Object.keys(dog1.bulldog).length;
并让它返回2
但它需要自动完成所有品种。
基本上循环遍历列表
答案 0 :(得分:4)
试试这个
$.each(resp.message, function(index, dogs) {
var subdog = dogs.length;
console.log(subdog);
});
答案 1 :(得分:3)
您可以使用Object.values()
获取对象值的数组,并使用.map()
返回每个数组的.length
,该数组是对象中属性的值
let o = {"status":"success","message":{"affenpinscher":[],"african":[],"airedale":[],"corgi":["cardigan"],"akita":[],"appenzeller":[],"basenji":[],"beagle":[],"bluetick":[],"borzoi":[],"bouvier":[],"boxer":[],"brabancon":[],"briard":[],"bulldog":["boston","french"]}};
let len = Object.values(o.message).map(({length}) => length);
console.log(len);
答案 2 :(得分:1)
您可以使用方括号语法来获取值。
Object.keys(dog1).forEach((dog) => {
console.log(key) // Will log `bulldog` etc.
console.log(dog[key].length); // Will log 2, etc.
});
答案 3 :(得分:1)
这样做:
var subdog = Object.keys(dog1).map(dog => dog1[dog].length);
然后,subdog将包含每个品种的长度数组。
答案 4 :(得分:0)
您可以通过循环访问对象并使用键for(let key of myObject)
来访问该值,然后通过方括号访问它,就像使用数组一样。
let dogs = {
"status": "success",
"message": {
"affenpinscher": [],
"african": [],
"airedale": [],
"corgi": [
"cardigan"
],
"akita": [],
"appenzeller": [],
"basenji": [],
"beagle": [],
"bluetick": [],
"borzoi": [],
"bouvier": [],
"boxer": [],
"brabancon": [],
"briard": [],
"bulldog": [
"boston",
"french"
]
}
}
for (let key in dogs.message) {
if (Array.isArray(dogs.message[key]) && dogs.message[key].length > 0) {
// Do something here
dogs.message[key].forEach(d => console.log(d))
}
}
&#13;
答案 5 :(得分:0)
users : {
byId : {},
allIds : []
}
希望这有效
答案 6 :(得分:0)
如果您希望每个品种分开而不是总计只需将其更改为
,我会重新阅读该问题 for(var i=0; i<dog1.length;i++){
subDog[i] = dog1[i].length;
});
答案 7 :(得分:0)
我认为你需要编程递归。并且没有 jquery 需要
这是一个示例对象和您的对象
let testObj = {
lala0: {
lala1: {
a: "1"
},
foo1: {
b: "2"
},
doo1: {
c: "3"
}
},
foo0: {
d: "4"
},
doo0: {
lala1: {
lala2: {
e: "5"
},
foo2: {
f: "6"
},
doo2: {
g: "7"
}
},
foo1: {
lala2: {
h: "8"
},
foo2: {
i: "9"
},
doo2: {
j: "10"
}
},
doo1: {
lala2: {
k: "11"
},
foo2: {
l: "12",
m: "13"
},
doo2: {
n: "14"
}
}
}
},
dogs = {
"status": "success",
"message": {
"affenpinscher": [],
"african": [],
"airedale": [],
"corgi": [
"cardigan"
],
"akita": [],
"appenzeller": [],
"basenji": [],
"beagle": [],
"bluetick": [],
"borzoi": [],
"bouvier": [],
"boxer": [],
"brabancon": [],
"briard": [],
"bulldog": [
"boston",
"french"
]
}
}
function isObject(target) {
return typeof(target) == "object";
}
function Recursive(obj, i = "") {
for (let key in obj)
if (obj.hasOwnProperty(key))
if (isObject(obj)) {
value = obj[key];
if (value == "[object Object]")
value = "object";
console.log(i + key + ": " + value);
Recursive(obj[key], i + "----|");
}
}
Recursive(testObj);
console.log("NEW OBJECT!")
Recursive(dogs);
用以下代码重写dog变量:
let dogs = readJsonFromUrl('http://your.site.com/v1/jsons/...');