Lodash getOr для нуля - PullRequest
       13

Lodash getOr для нуля

0 голосов
/ 05 апреля 2019

Итак, у меня есть опора, которая иногда будет нулевой.Я хочу либо получить значение, либо вернуть null.

В настоящее время я делаю это:

getOr(
    null,
    `shift.id`,
    ownProps
  );

Я получаю shifts.id из реквизита, однако, если нет shift.idЯ верну ошибкуКак я могу вернуть shift.id или null?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Способ работы _.getOr состоит в том, что он предоставляет значение по умолчанию (первый аргумент) в случае, если значение, на которое ссылается путь (второй аргумент), не может быть найдено в объекте (третий аргумент).На самом деле это то же самое, что и _.get, но порядок аргументов перевернут.

Здесь приведен пример:

let myObjects = [{
    shift: {
      id: 1,
      example: "text1"
    }

  },
  {
    shift: {
      id: 2,
      example: "text3"
    }

  },
  {
    shift: {
      example: "text2"
    }
  }
]


myObjects.forEach((object) => {
  let result = _.getOr(null, "shift.id", object)
  console.log(result);
})
<script src="https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)"></script>

Вывод на консоль:

1
2
null

Из того, что вы описали, хотя мне не ясно, что на самом деле вы пытаетесьсделать.Помните, что get / getOr вернет то, на что ссылается путь (даже если он уже нулевой), если его там нет (как в undefined), и в этот момент он вернет значение по умолчанию.

Так что в этомслучай, когда нет shift.id, вы просите _.getOr вернуть ноль.Похоже, что вы получаете сообщение об ошибке в GraphQL при попытке использовать его с нулевым значением.В данном случае это не проблема с lodash, а проблема с вашими данными / тем, как вы используете GraphQL.

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

0 голосов
/ 05 апреля 2019

Я попробовал ваш фрагмент с редкой информацией, которую вы предоставили, и, насколько я понимаю, она работает так, как задумано.Смотрите также мой repl.it .

код

const _ = require('lodash/fp');

var ownProps = { shifts : { id: 'test' }};

console.log(_.getOr(
    null,
    `shifts.id`,
    ownProps
  ));

ownProps = { shifts : { foo: 'test' }};

console.log(_.getOr(
    null,
    `shifts.id`,
    ownProps
  ));

выход

test
null
...