Javascript 是否有更好的方法循环通过此对象?
JSON JSJavascript 是否有更好的方法循环通过此对象?,javascript,jquery,json,Javascript,Jquery,Json,JSON JS for(数据中的k){ 对于(数据[k]中的x){ var cObj=数据[k][x]; $(“#列表”)。追加( “”+x+“” ); 对于(变量i=0;ic.name).join(“”)+ “” ); } #list>li>p{ 字体大小:粗体; } #列表>列表>分区{ 左侧填充:10px; } 您不需要外部循环,因为只有一个属性 最里面的循环可以通过使用.map()获取国家的名称和.join()将它们与正确的HTML链接(还可以在map/join调用之前和之后添加开头和
for(数据中的k){
对于(数据[k]中的x){
var cObj=数据[k][x];
$(“#列表”)。追加(
“”+x+“ ”
);
对于(变量i=0;i
我得到了预期的结果。但我觉得我用了太多的for循环。这是我的示例。您不需要外部循环,因为只有一个属性 最里面的循环可以通过使用
.map()
获取国家的名称和.join()
将它们与正确的HTML链接(还可以在map/join
调用之前和之后添加开头和结尾div
来替换
var数据={
“国家”:{
“欧洲”:[{名称:“英格兰”,缩写:“恩”},{名称:“西班牙”,缩写:“es”}],
“美洲”:[{名称:“美国”}],
“亚洲”:[{名称:“中国”}]
}
};
用于(数据国家/地区中的常数x){
const cObj=国家数据[x];
$(“#列表”)。追加(
“”+x+“”+
cObj.map(c=>c.name).join(“”)+
“ ”
);
}
#list>li>p{
字体大小:粗体;
}
#列表>列表>分区{
左侧填充:10px;
}
您不需要外部循环,因为只有一个属性
最里面的循环可以通过使用.map()
获取国家的名称和.join()
将它们与正确的HTML链接(还可以在map/join
调用之前和之后添加开头和结尾div
来替换
var数据={
“国家”:{
“欧洲”:[{名称:“英格兰”,缩写:“恩”},{名称:“西班牙”,缩写:“es”}],
“美洲”:[{名称:“美国”}],
“亚洲”:[{名称:“中国”}]
}
};
用于(数据国家/地区中的常数x){
const cObj=国家数据[x];
$(“#列表”)。追加(
“”+x+“”+
cObj.map(c=>c.name).join(“”)+
“ ”
);
}
#list>li>p{
字体大小:粗体;
}
#列表>列表>分区{
左侧填充:10px;
}
我给你的建议是去掉裸环!它们确实使代码更难阅读。而是使用forEach
,map
等功能。请使用以下方法查看此代码段:
var数据={
“国家”:{
“欧洲”:[{名称:“英格兰”,缩写:“恩”},{名称:“西班牙”,缩写:“es”}],
“美洲”:[{名称:“美国”}],
“亚洲”:[{名称:“中国”}]
}
};
对象.键(数据.国家).forEach(函数(大陆){
var countryList=数据。国家[大陆];
$(“#列表”)。追加(“”+大陆+” ”);
countryList.forEach(函数(countryObj){
$(“#list li”).append(“+countryObj.name+”);
});
});代码>
我给你的建议是去掉裸环!它们确实使代码更难阅读。而是使用forEach
,map
等功能。请使用以下方法查看此代码段:
var数据={
“国家”:{
“欧洲”:[{名称:“英格兰”,缩写:“恩”},{名称:“西班牙”,缩写:“es”}],
“美洲”:[{名称:“美国”}],
“亚洲”:[{名称:“中国”}]
}
};
对象.键(数据.国家).forEach(函数(大陆){
var countryList=数据。国家[大陆];
$(“#列表”)。追加(“”+大陆+” ”);
countryList.forEach(函数(countryObj){
$(“#list li”).append(“+countryObj.name+”);
});
});代码>
为您准备。这应该比你原来的帖子更有表现力
for (k in data) {
for (x in data[k]) {
var cObj = data[k][x];
$("#list").append(
"<li><p>" + x + "</p></li>"
);
for (var i=0; i < cObj.length; i++) {
$("#list").append(
"<div> " + cObj[i].name + " </div>"
);
}
}
}
var数据={
“国家”:{
“欧洲”:[{名称:“英格兰”,缩写:“恩”},{名称:“西班牙”,缩写:“es”}],
“美洲”:[{名称:“美国”}],
“亚洲”:[{名称:“中国”}]
}
};
常量大陆=Object.key(data.countries);
对于(设j=0;j<大陆长度;j+=1){
$(“#列表”)。追加(
“”+大陆[j]+“ ”
);
让countries=Object.values(data.countries[大陆]]);
对于(设i=0;i
与我的答案相比,我更喜欢其他两个答案,它们看起来比我的答案性能更好,循环次数更少。。这应该比你原来的帖子更有表现力
for (k in data) {
for (x in data[k]) {
var cObj = data[k][x];
$("#list").append(
"<li><p>" + x + "</p></li>"
);
for (var i=0; i < cObj.length; i++) {
$("#list").append(
"<div> " + cObj[i].name + " </div>"
);
}
}
}
var数据={
“国家”:{
“欧洲”:[{名称:“英格兰”,缩写:“恩”},{名称:“西班牙”,缩写:“es”}],
“美洲”:[{名称:“美国”}],
“亚洲”:[{名称:“中国”}]
}
};
常量大陆=Object.key(data.countries);
对于(设j=0;j<大陆长度;j+=1){
$(“#列表”)。追加(
“”+大陆[j]+“ ”
);
让countries=Object.values(data.countries[大陆]]);
对于(设i=0;i
我比我的答案更喜欢其他两个答案,它们看起来比我的答案性能更好,循环次数更少。我无法找到将其减少为一个循环的方法,但您可以将其减少为两个,并提高可读性(如前一个答案中所述)
$。每个(数据、国家、职能(大陆、国家){
$(“#列表”)。追加(
“”+大陆+“ ”
);
美元。每个(国家,职能(指数,国家){
$(“#列表”)。追加(
“”+country.name+“”
);
})
})
.我无法找到将其减少为一个循环的方法,但您可以将其减少为两个,并提高可读性(如前面的回答中所述)
$。每个(数据、国家、职能(大陆、国家){
$(“#列表”)。追加(
“”+大陆+“ ”
);
美元。每个(国家,职能(指数,国家){
$(“#列表”)。追加(
“”+country.name+“”
);
})
})
.我们可以利用jQuery的.append()
接受数组的能力。这个allo
var data = {
"countries": {
"europe" : [{name: "England", abbr: "en"}, {name: "Spain", abbr: "es"}],
"americas" : [{name: "Unites States"}],
"asia" : [{name: "China"}]
}
};
const continents = Object.keys(data.countries);
for (let j = 0; j < continents.length; j += 1) {
$("#list").append(
"<li><p>" + continents[j] + "</p></li>"
);
let countries = Object.values(data.countries[continents[j]]);
for (let i = 0; i < countries.length; i += 1) {
$("#list").append(
"<span> " + countries[i].name + " </span>"
);
}
}
$.each(data.countries, function(continent, countries){
$("#list").append(
"<li><p>" + continent + "</p></li>"
);
$.each(countries, function(index, country){
$("#list").append(
"<div> " + country.name + " </div>"
);
})
})