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();
});