Как обрабатывать нулевые значения с помощью lodash - PullRequest
0 голосов
/ 17 октября 2018

Это просто json

  {
    home: 68
    id: 1
    name: "RL Conference Room"
    nickname: null
    setpoint: 32.34
    sleep: 58
  }

Когда я получаю пустой ключ, эта функция lodash работает

_.get(room, 'keyName', 'whenKeyNotFound')

Но, как вы можете видеть выше, я получаю нулевое значение в nickname ТакЯ хочу заменить его на name, но это не сработает.

_.get(room, 'nickname', 'name')

Есть ли в lodash какая-нибудь функция, которая помогает?

Спасибо !!!

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Так как null ложно, вы можете сделать

_.get(room, 'nickname') || 'name'

.get только третий аргумент, если результат равен undefined

см.: https://lodash.com/docs/4.17.10#get

0 голосов
/ 18 октября 2018

В сценарии с одним уровнем и, поскольку (в вашем случае) null также является нежелательным результатом, кажется, что вам лучше без лишнего, и просто сделайте это:

room.nickname || room.name 

На самом деле он будет короче и достигнет того же результата в вашем случае.

Вы также можете сделать:

let name = _.defaultTo(room.nickname, room.name)

_. DefaultTo длязащищает вас от null, NaN and undefined

Так что в приведенном выше случае вы получите obj.name, но если у вас есть набор nickname, вы получите это.

В сценариях, когда у вас есть длинныйпуть, который вы можете использовать _.isEmpty в пользовательской функции, подобной этой:

const getOr = (obj, path, def) => {
    var val = _.get(obj, path)
    return _.isEmpty(val) ? def : val
}

Это будет обрабатывать ваши null, а также другие сценарии согласно _. isEmpty документам.

Вы можете просто использовать как:

getOr(room, 'nickname', room.name)

И вы можете вложить его:

getOr(room, 'nickname', getOr(room, 'name', 'N/A'))
0 голосов
/ 17 октября 2018

Вы можете положиться на тот факт, что null, undefined и т. Д. Являются ложными и использовать оператор ||.

_.get(room, 'nickname') || _.get(room, 'name')
...