循环数组无法正常工作

时间:2017-04-20 12:30:50

标签: jquery arrays

我正在尝试获取数组fieldso对象的值。我无法获得房产内的价值。我做错了什么?

var o = {
  "templatename": "sdgds",
  "fields": {
    "s1_req_1": 1,
    "s1_req_2": 1,
    "s1_req_3": 1,
    "s1_req_4": 1,
    "s1_req_5": 1,
    "s1_req_6": 1,
    "s1_req_7": 1,
    "s1_req_8": 1,
    "s1_req_9": 1,
    "s1_req_10": 1,
    "s1_req_11": 1,
    "s1_req_12": 1,
    "s1_req_13": 1,
    "s1_req_14": 1,
    "v1_dm_1": 1,
    "v1_dm_5": 1,
    "v1_dm_6": 1,
    "f1_fs_3": 1,
    "f1_fs_1": 1,
    "f1_fs_2": 1,
    "e3_eh_19": 1,
    "f1_fs_11": 1,
    "s3_sh_1": 1,
    "s3_sh_6": 1,
    "s3_sh_7": 1,
    "v1_dm_7": 1,
    "v1_dm_13": 1,
    "v1_dm_9": 1
  },
  "customerid": 'SMRTsspd'
};

$('#template').val(o.templatename);
$(o.fields).each(function(t) {
  $('input[value=' + t.name + ']').prop('checked', true);
});

4 个答案:

答案 0 :(得分:2)

你可以在没有jquery的情况下遍历对象:

Object.keys(o.fields).forEach(function (key) {
    $('input[value=' + key + ']').prop('checked', o.fields[key]);
});

正如其他人所说,o.fields是一个对象,因此要迭代其值,您需要首先通过Object.keys(o.fields)方法提取其键。然后,您可以通过简单的Array.forEach(keys)迭代这些键。最后要使用该值,您只需执行o.fields[key]即可。

或者使用jquery,使用它:

$.each(o.fields, function(key, value) {
    $('input[value=' + key + ']').prop('checked', value);
});

答案 1 :(得分:1)

使用 For-In 您可以使用For-In循环枚举对象以获取每个键值对。

for(var key in o.fields){
  if (o.fields.hasOwnProperty(key)) {
    $('input[value=' + key + ']').prop('checked', true);
  }
}

var o = {
  "templatename": "sdgds",
  "fields": {
    "s1_req_1": 1,
    "s1_req_2": 1,
    "s1_req_3": 1,
    "s1_req_4": 1,
    "s1_req_5": 1,
    "s1_req_6": 1,
    "s1_req_7": 1,
    "s1_req_8": 1,
    "s1_req_9": 1,
    "s1_req_10": 1,
    "s1_req_11": 1,
    "s1_req_12": 1,
    "s1_req_13": 1,
    "s1_req_14": 1,
    "v1_dm_1": 1,
    "v1_dm_5": 1,
    "v1_dm_6": 1,
    "f1_fs_3": 1,
    "f1_fs_1": 1,
    "f1_fs_2": 1,
    "e3_eh_19": 1,
    "f1_fs_11": 1,
    "s3_sh_1": 1,
    "s3_sh_6": 1,
    "s3_sh_7": 1,
    "v1_dm_7": 1,
    "v1_dm_13": 1,
    "v1_dm_9": 1
  },
  "customerid": 'SMRTsspd'
};

$('#template').val(o.templatename);
for (var key in o.fields) {
  if (o.fields.hasOwnProperty(key)) {
    $('input[value=' + key + ']').prop('checked', true);
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type='checkbox' value='s1_req_1'>
<input type='checkbox' value='s1_req_2'>
<input type='checkbox' value='s1_req_3'>
<input type='checkbox' value=''>
<input type='checkbox' value=''>

答案 2 :(得分:1)

因为post标签是jquery,所以我特意提供了一个特定于jQuery的解决方案$.each

对于Vanilla JS解决方案,请查看SO Post:How do I loop through or enumerate a JavaScript object?

var o = {
  "templatename": "sdgds",
  "fields": {
    "s1_req_1": 1,
    "s1_req_2": 1,
    "s1_req_3": 1,
    "s1_req_4": 1,
    "s1_req_5": 1,
    "s1_req_6": 1,
    "s1_req_7": 1,
    "s1_req_8": 1,
    "s1_req_9": 1,
    "s1_req_10": 1,
    "s1_req_11": 1,
    "s1_req_12": 1,
    "s1_req_13": 1,
    "s1_req_14": 1,
    "v1_dm_1": 1,
    "v1_dm_5": 1,
    "v1_dm_6": 1,
    "f1_fs_3": 1,
    "f1_fs_1": 1,
    "f1_fs_2": 1,
    "e3_eh_19": 1,
    "f1_fs_11": 1,
    "s3_sh_1": 1,
    "s3_sh_6": 1,
    "s3_sh_7": 1,
    "v1_dm_7": 1,
    "v1_dm_13": 1,
    "v1_dm_9": 1
  },
  "customerid": 'SMRTsspd'
};

$('#template').val(o.templatename);
$.each(o.fields, function(key, value) {
  console.log(key + ":" + value);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 3 :(得分:1)

我没有得到你。从我的理解。

$(o.fields)没有任何意义。

o.fields应该是一个数组,以便使用每个。 尝试将代码更改为

"fields": [
    {"s1_req_1": 1}
    {"s1_req_2": 1},
    ......]

和'name'没有关键名称。

o.fields.each(函数(T){

});

你能发布完整的代码吗?