Лучший способ установить переменные из массива объектов - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть следующий код, который кажется немного избыточным, так как я многократно повторяюсь над одним и тем же массивом, любые предложения по улучшению, сохраняя его читаемым, будут оценены.

Формат объекта массива является стандартным один, где я проверяю ключи в каждом объекте, чтобы убедиться, что он соответствует определенному условию, например, каждый объект содержит одно значение, или только некоторые из них выполняют et c [{}, {}, {}]

const getValue = arrayOfObjects => {

  const hasA = arrayOfObjects.some(
    object => arrayOfObjects.abc === 'val1'
  );

  const hasB = arrayOfObjects.every(
    object => arrayOfObjects.abc === 'val2'
  );

  // the above 2 iterations are repeated about 4 more times for different checks 
  // then there are a few versions of the below assignment depending on the above variables

  const hasC =
    hasA ||
    hasB;

  // finally the function returns one of the values
  if (hasA) {
    return 'val10';
  } else if (hasB) {
    return 'val11';
  } else if (hasD) {
    return 'val12';
  }
};

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Это звучит как теоретический вопрос. Звучит так, будто вам интересно, есть ли у нескольких Array.prototype методов, таких как some и every в одном и том же массиве многократные недостатки, или есть ли более читабельный способ сделать это.

Это зависит.

Если размер массива n, как правило, довольно мал, в практическом смысле это не имеет значения. Выберите то, что более читабельно. Сложность Big O становится более полезной на практическом уровне, если вы имеете дело с большим количеством элементов массива.

Булевы переменные, полученные из some и every, на мой взгляд, могут быть очень удобочитаемыми.

Если вы находитесь в ситуации, когда массив может быть довольно большим, вы можете попробовать сделать это за один шаг. Array.prototype.reduce будет хорошим инструментом для этого: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

0 голосов
/ 10 апреля 2020

В общем, когда вы используете every и some (которые я лично люблю, поскольку они очень удобочитаемые), вам следует остановиться и подумать о необходимости проверок, которые вы делаете.

Чтобы упростить примеры, которые у вас были, допустим, у вас есть куча фруктов, и вы проверяете:

  1. Есть ли хотя бы один апельсин.
  2. Все из фруктов яблоки.

Понятно, что

Если (1) равно верно , то (2) должно быть ложно

И наоборот:

Если (2) равно true , то (1) должно быть false

Затем вы можете сэкономить на тестировании одного из них, если другой - true, используя, например, else if. Кроме того, если один из них false - тогда вам просто не нужно проверять (1) or (2), что гарантированно будет false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...