尝试使用数组和散列来简化循环

时间:2014-07-02 07:14:27

标签: javascript

鉴于此:

var formItems = [
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(0)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(1)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(2)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(3)"),   
  ];

如果有任何方法可以简化这一点:

var values = getValues(); // values.length is always equal to formItem.length
for (var i = 0; i < values.length; i++) {
  if (someCondition()) {
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(0)").val(values[i].abc);
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(1)").val(values[i].cde);
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(2)").val(values[i].abcdf);
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(3)").val(values[i].zyz);

}

1 个答案:

答案 0 :(得分:1)

我不确定你想要什么,但也许是这样的?

var items = [
  { input: "div.class1.class2:visible:eq(0) div.class3 input:eq(0)", value: "abc" },
  { input: "div.class1.class2:visible:eq(0) div.class3 input:eq(1)", value: "cde" },
  { input: "div.class1.class2:visible:eq(0) div.class3 input:eq(2)", value: "abcdf" },
  { input: "div.class1.class2:visible:eq(0) div.class3 input:eq(3)", value: "zyz" }
];

var values = getValues();
for (var i = 0; i < values.length; i++) {
  if(this value is the right one) {
    for(var j in items) {
      $(item[j].input).val(values[i][items[j].value);
    }
  }
}

编辑13:15

如果这不是简化你的意思,那么你必须详细说明。

var formItems = [
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(0)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(1)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(2)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(3)"),   
  ];

var formValues = ["abc", "cde", "abcdf", "zyz"];

var values = getValues(); // values.length is always equal to formItem.length
for (var i = 0; i < values.length; i++) {
  if(this value is the right one) {
    for(var j in formItems) {
      formItems[j].val(values[i][formValues[j]);
    }
    break;
  }
}