Javascript 将对象转换为数组以引入foreach
我有一个目标:Javascript 将对象转换为数组以引入foreach,javascript,arrays,foreach,Javascript,Arrays,Foreach,我有一个目标: var paises = { pais: [ { idPais: "1", nombre: "España", continente: "Europa", }, { idPais: "2", nombre: "Portugal",
var paises = {
pais: [
{
idPais: "1",
nombre: "España",
continente: "Europa",
},
{
idPais: "2",
nombre: "Portugal",
continente: "Europa",
},
{
idPais: "3",
nombre: "Francia",
continente: "Europa",
}
]
}
我尝试将其转换为数组,并通过以下方式获取对象的属性:
function getCountries(continente){
var proceed=true;
var formA = "<select name='selectPais'>"
var formB = "</select>"
var arrayPaises = $.map(paises, function(value, index){
return [value].nombre;
});
console.log(arrayPaises);
arrayPaises.forEach(
function (item,index){
formA = formA + "<option value="+item[index].nombre+"id="+item[index].idPais+">";
}
);
var formDiv = document.getElementById("formDiv");
formDiv.innerHTML = formA+formB;
}
功能获取国家(大陆){
var=true;
var formA=“”
var formB=“”
var arrayPaises=$.map(paises,函数(值,索引){
返回[value].nombre;
});
控制台日志(arrayPaises);
阿雷帕斯·弗雷奇(
功能(项目、索引){
formA=formA+“”;
}
);
var formDiv=document.getElementById(“formDiv”);
formDiv.innerHTML=formA+formB;
}
控制台日志显示一个空字符串作为结果。我试过使用return[value]代码>返回3个元素(国家),每个元素有2个“对象”,如下所示:
如何使要在数组中转换的对象属性能够引入到foreach中?以下是工作函数
将JSON解析为paises.pais.forEach()代码>
使用js
生成HTML
的代码中存在string
串联错误
var paises={
pais:[
{
IDPAI:“1”,
名称:“España”,
欧洲大陆:“欧罗巴”,
},
{
IDPAI:“2”,
名称:“葡萄牙”,
欧洲大陆:“欧罗巴”,
},
{
IDPAI:“3”,
名字:“弗朗西娅”,
欧洲大陆:“欧罗巴”,
}
]
};
国家(大陆)职能{
var=true;
var formA=“”
var formB=“”
paises.pais.forEach(
功能(项目、索引){
formA=formA+“”+item.nombre+“”;
}
);
var formDiv=document.getElementById(“formDiv”);
formDiv.innerHTML=formA+formB;
}
getCountries()代码>
您的错误将来自项[index]
,您不需要forEach中的索引,通过使用[index]
,每个循环都已经保存了您期望的内容
然而,这并不是真正的方法(字符串连接、多个不必要的循环、设置innerHTML)。paises.pais已经是一个可以直接循环的数组
相反,请使用适当的方法创建元素,请参见以下内容:
var paises={
pais:[{
IDPAI:“1”,
名称:“España”,
欧洲大陆:“欧罗巴”,
}, {
IDPAI:“2”,
名称:“葡萄牙”,
欧洲大陆:“欧罗巴”,
}, {
IDPAI:“3”,
名字:“弗朗西娅”,
欧洲大陆:“欧罗巴”,
}]
};
函数createSelection(arr,appendToDiv){
var select=document.createElement('select');
select.name=“selectPais”;
arr.forEach(功能(项目){
var option=document.createElement('option');
option.id=item.idpai;
option.value=item.nombre
option.appendChild(document.createTextNode(item.nombre));
选择.appendChild(选项);
});
document.getElementById(appendToDiv).appendChild(select);
}
createSelection(paises.pais,“表单div”)代码>
当您使用JQuery时,为什么不一直使用它呢?代码保持干净,您不必使用“混合”方式来实现所需的结果
这里有一个指向JSFIDLE的链接,显示了一种实现您想要的事情的方法
var paises={
pais:[
{
IDPAI:“1”,
名称:“España”,
欧洲大陆:“欧罗巴”,
},
{
IDPAI:“2”,
名称:“葡萄牙”,
欧洲大陆:“欧罗巴”,
},
{
IDPAI:“3”,
名字:“弗朗西娅”,
欧洲大陆:“欧罗巴”,
}
]
}
国家(大陆)职能{
var select=$(“”);
paises.pais.forEach(函数(项、索引){
var opt=$(“”);
选择属性(“值”,项目名称);
opt.attr(“id”,item.id);
选择文本(项目名称);
选择。追加(opt);
});
$(“#formDiv”)。追加(选择);
}
$(文档).ready(函数(){
getCountries();
});
谢谢!我认为这是最好的办法,没有想到这一点。谢谢。如果“pais”不是一个字符串,而是一个数字,我怎么能得到元素:就像这里使用括号表示法一样。物品[编号]@Asier
var paises = {
pais: [
{
idPais: "1",
nombre: "España",
continente: "Europa",
},
{
idPais: "2",
nombre: "Portugal",
continente: "Europa",
},
{
idPais: "3",
nombre: "Francia",
continente: "Europa",
}
]
}
function getCountries(continente){
var select = $("<select name='selectPais' />");
paises.pais.forEach(function(item,index) {
var opt = $("<option />");
opt.attr("value",item.nombre);
opt.attr("id",item.id);
opt.text(item.nombre);
select.append(opt);
});
$("#formDiv").append(select);
}
$(document).ready(function() {
getCountries();
});