Incerteza
Incerteza

Reputation: 34934

Trying to simplify a loop using an array and a hash

Given this:

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)"),   
  ];

If there any way to simplify this:

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

}

Upvotes: 0

Views: 52

Answers (1)

Tiele Declercq
Tiele Declercq

Reputation: 2160

I'm not sure what you want but perhaps like this?

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

Edit 13:15

If this isn't what you mean by simplifying, you'll have to elaborate.

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

Upvotes: 1

Related Questions