Преобразуйте повторение «если» вместо «l oop» (javascript) - PullRequest
1 голос
/ 28 марта 2020

У меня есть JSON данные, поступающие со значениями вроде: status -> pla -> wea -> wea_0 -> stat

Они представляют собой последовательность wea_0, wea_1, wea_2,... внутри pla

И я пытаюсь проверить, если stat из них acte

Вот мой код:

if (status.pla.wea.wea_0.stat === 'acte') {
    save_acte();
} else if (status.pla.wea.wea_1.stat === 'acte') {
      save_acte();
} else if (status.pla.wea.wea_2.stat === 'acte') {
      save_acte();
} else if (status.pla.wea.wea_3.stat === 'acte') {
      save_acte();
} else if (status.pla.wea.wea_4.stat === 'acte') {
      save_acte();
} else if (status.pla.wea.wea_5.stat === 'acte') {
      save_acte();
} else if (status.pla.wea.wea_6.stat === 'acte') {
      save_acte();
}

Пожалуйста, помогите мне вместо этого loop или for.

Ответы [ 2 ]

1 голос
/ 28 марта 2020

Доступ к wea_x в качестве свойств с помощью динамического c имени:

for (let i = 0; i < 7; i++) {
  if (status.pla.wea[`wea_${i}`].stat === "acte") {
    save_acte();
  }
}
1 голос
/ 28 марта 2020

Вы можете использовать массив со всеми возможными индексами wea_* и повторять его, проверяя каждую запись wea_* по очереди. Например:

const status = {
  pla: {
    wea: {
      wea_0: {
        stat: "blah"
      },
      wea_1: {
        stat: "blah"
      },
      wea_2: {
        stat: "acte"
      },
      wea_3: {
        stat: "blah"
      }
    }
  }
};

function save_acte(i) {
  console.log('saved acte ' + i);
}

[0,1,2,3].forEach(i => status.pla.wea['wea_' + i].stat === 'acte' ? save_acte(i) : '');
// or, if you're not using IE
[...Array(4).keys()].forEach(i => status.pla.wea['wea_' + i].stat === 'acte' ? save_acte(i) : '');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...