如何在数组Javascript中循环获取对象的值?

如何在数组Javascript中循环获取对象的值?,javascript,ajax,Javascript,Ajax,更新: 响应的完整值: "{"versions":[ { "name":"Windows 8.1 with Update 3 (build 9600)", "version_id":"11" }, { "name":"Windows 7 SP1 (build 7601)", "version_id":"9" }, { "name":"Windows 10, Version 1803 - Re

更新:
响应的完整值

"{"versions":[  
   {  
      "name":"Windows 8.1 with Update 3 (build 9600)",
      "version_id":"11"
   },
   {  
      "name":"Windows 7 SP1 (build 7601)",
      "version_id":"9"
   },
   {  
      "name":"Windows 10, Version 1803 - Redstone 4 [Apr 2018] (build 17134.1)",
      "version_id":"97"
   },
   {  
      "name":"Windows 10, Version 1709 - Redstone 3 [Sep 2017] (build 16299.15)",
      "version_id":"92"
   },
   {  
      "name":"Windows 10, Version 1703 - Redstone 2 [March 2017] (build 15063.0)",
      "version_id":"41"
   },
   {  
      "name":"Windows 10, Version 1607 - Redstone 1 [Jul 2016] (build 14393.0)",
      "version_id":"16"
   },
   {  
      "name":"Windows 10, Version 1511 - Threshold 2 [Nov 2015] (build 10586.0)",
      "version_id":"13"
   },
   {  
      "name":"Windows 10, Version 1511 - Threshold 2 [Feb 2016] (build 10586.104)",
      "version_id":"14"
   },
   {  
      "name":"Windows 10, Version 1511 - Threshold 2 [Apr 2016] (build 10586.164)",
      "version_id":"15"
   },
   {  
      "name":"Windows 10, Version 1507 - Threshold 1 [Jul 2015] (build 10240.16384)",
      "version_id":"12"
   }
]
}"
我有一个如下所示的数组:

{
   "versions":[
      {
         "name":"Windows 8.1 with Update 3 (build 9600)",
         "version_id":"11"
      },
      {
         "name":"Windows 7 SP1 (build 7601)",
         "version_id":"9"
      },
      {
         "name":"Windows 10, Version 1803 - Redstone 4 [Apr 2018] (build 17134.1)",
         "version_id":"97"
      }
   ]
}
我想获得
name
version\u id
以添加到选择下拉列表中。 看起来像:

  success: function(response){
    var options = ''; 

    $(response.versions).each(function() {
        options += '<option value="' + $(this).attr('version_id') + '">' + $(this).attr('name') + '</option>';
    });
成功:功能(响应){
var选项=“”;
$(response.versions){
选项+=''+$(this.attr('name')+'';
});


但是我无法获得
version\u id
name
。有什么方法可以做到这一点吗?

不需要jQuery,只需迭代
versions
属性。直接设置属性和文本内容比插入要解析为HTML的文本更安全:

const输入={
“版本”:[{
“名称”:“Windows 8.1及其更新3(build 9600)”,
“版本号”:“11”
},
{
“名称”:“Windows 7 SP1(版本7601)”,
“版本号”:“9”
},
{
“名称”:“Windows 10,版本1803-红石4[2018年4月](版本17134.1)”,
“版本号”:“97”
}
]
};
const select=document.querySelector('select');
input.versions.forEach({name,version\u id})=>{
const option=select.appendChild(document.createElement('option');
option.value=版本号;
option.textContent=名称;
});

您不需要
$()
attr()
用于读取html元素的属性

这是对象,所以只需使用对象表示法即可访问其属性

 $.each(response.versions, function() {
        options += '<option value="' + this.version_id + '">' + this.name + '</option>';
 });
$.each(response.versions,function()){
选项+=''+this.name+'';
});

您只需在数组中循环并附加生成的
html
以选择标记

var数据={
“版本”:[
{
“名称”:“Windows 8.1及其更新3(build 9600)”,
“版本号”:“11”
},
{
“名称”:“Windows 7 SP1(版本7601)”,
“版本号”:“9”
},
{
“名称”:“Windows 10,版本1803-红石4[2018年4月](版本17134.1)”,
“版本号”:“97”
}
]
};
data.versions.forEach(函数(e){
$(“#sel”).append(`e.name}`)
})

正如其他人所说:不需要jQuery。不确定jQuery是否可以以这种方式使用JSON,因为该函数主要用于访问XML/DOM元素

下面是一个使用map和reduce的简单ES6版本:

response.versions.map(v => `<option value="${v.version_id}">${v.name}</option>`).reduce((acc, opt) => acc + opt)
response.versions.map(v=>`${v.name}`).reduce((acc,opt)=>acc+opt)

查找jQuery each-您在这个应用程序中使用它是错误的-
函数接受参数…呃,不一定是错误的,只是…的另一个版本。每个版本都更合适。我收到的错误看起来像:
jQuery.js:2 Uncaught TypeError:Cannot read属性'length'of undefined at function.each(jQuery.js:2)在Object.success(为_5.js:37选择_)在o(jquery.js:2)在Object.fireWith[as resolveWith](jquery.js:2)在w(jquery.js:4)在XMLHttpRequest.d(jquery.js:4)上
它显示的错误看起来像:
uncaughttypeerror:无法读取未定义的属性“length”
我添加了Jquery 1.9.1I,就像您的示例一样。您可以在这里看到。第一:第二:很可能是因为
response
。这可能是其他原因。您可以执行
console.log(response)吗
如果成功,请告诉我这是什么?console.log中的结果如下:不要将其作为图像添加到此处。只需添加内容,我就可以检查这是否是有效的jsonHi@CertainPerformance,我有一个错误看起来像:
未捕获类型错误:无法读取未定义的
的属性“forEach”。我必须使用JQuery执行另一个任务。因此,我尝试了您的代码,但仍然保留了Jquery。我不知道Jquery是否存在?Jquery与此无关-如果
versions
属性被解释为
未定义的
,则您的输入对象必须看起来与您在问题中发布的对象不同。也许可以编辑您的问题以发布您的实际对象结构?这是错误的好像您在
函数(响应){
中的
响应
实际上与对象的
响应
属性不对应。您在屏幕截图中记录了什么?响应
实际上是