更改for循环中匹配的项目,其余部分保持不变

时间:2018-04-11 16:08:02

标签: javascript arrays for-loop

不确定如何标题这个问题,但我尽力凝聚它。 我有一个键/值数组,我需要循环并打印出选择字段的选项。我的问题是我需要将ID与数组中的值匹配,并为该选项提供选定的属性。

**无法使用ES6语法**

我的阵列:

groups = 
[
 { name:"eng1",
   value: "12"
 },
 { name: "eng2",
   value: "247"
 },
 { name: "eng23",
   value: "112"
 },
];

我的循环:

var targetGroupId = 247;
for (i = 0; i < groups.length; i++) {
    if (groups[i].Value = targetGroupId) {
        html += "<option value'" + groups[i].Value + "' selected='selected'>" + groups[i].Name + "</option>";
    } else {
        html += "<option value='" + groups[i].Value + "'>" + groups[i].Name + "</option>";
    }
}

我需要打印出数组中的所有三个项目作为选项。但是,匹配targetGroupId的项目需要具有所选属性。

非常感谢任何指导!

3 个答案:

答案 0 :(得分:3)

您有三个问题

  1. 将值与=进行比较,而不是===
  2. 您正在使用大写键。
  3. 将字符串与数字进行比较。
  4. &#13;
    &#13;
    var groups = [{name: "eng1",value: "12"},{name: "eng2",value: "247"},{name: "eng23",value: "112"},],
        html = '',
        targetGroupId = 247;
        
    for (var i = 0; i < groups.length; i++) {
      if (/*Convert to number ->*/+groups[i].value === targetGroupId) {
        html += "<option value'" + groups[i].value + "' selected='selected'>" + groups[i].name + "</option>";
      } else {
        html += "<option value='" + groups[i].value + "'>" + groups[i].name + "</option>";
      }
    }
    
    console.log(html);
    &#13;
    &#13;
    &#13;

答案 1 :(得分:0)

您的代码存在以下问题:

  1. 您使用Value属性而不是value。将Value替换为代码中的value
  2. 其次,您需要更正此声明

    if (groups[i].Value = targetGroupId) {
    

    到此:

    if (groups[i].value == targetGroupId) {
    
  3. 我已使用==自动强制比较值,因为targetGroupId是一个数字,而对象中的value是一个字符串。

答案 2 :(得分:0)

键名称区分大小写。所以Value&amp; Name需要与案例匹配

value也是字符串,但targetGroupId是整数。所以需要将字符串转换为数字,反之亦然。

groups[i].Value = targetGroupId旁边不对,您需要进行质量检查,而不是分配值

&#13;
&#13;
var groups = [{
    name: "eng1",
    value: "12"
  },
  {
    name: "eng2",
    value: "247"
  },
  {
    name: "eng23",
    value: "112"
  },
];
var html = '';
var targetGroupId = 247;
for (i = 0; i < groups.length; i++) {
  if (+groups[i].value === targetGroupId) {
    html += "<option value'" + groups[i].value + "' selected='selected'>" + groups[i].name + "</option>";
  } else {
    html += "<option value='" + groups[i].value + "'>" + groups[i].name + "</option>";
  }
}
document.getElementById('test').innerHTML = html
&#13;
<select id='test'></select>
&#13;
&#13;
&#13;