0

给定以下数据

{ player1: 'healthy',
  player4: 'ready',
  player2: 'uncertain',
  player3: 'uncertain' 
}

我想知道lodash中是否有一种方法可以按对象的值过滤对象。例如,我想获得一个列表/数组,其中只有状态不确定的玩家,我想要另一个列表,其中包含所有状态不确定的玩家。

可能的解决方案

我认为这是可行的,但不确定它是否正确或正确的方法。

const result = _.pickBy(data, (key, value) => value.startsWith("uncert"));
4

3 回答 3

1

使用获取数组键_.keys(),然后通过检查对象的原始值是否为(或以 /includes/etc... 开头)来获取/_.partition()的数组:uncertaincertainuncertain

const data = {player1: 'healthy',player4: 'ready',player2: 'uncertain',player3: 'uncertain'}

const value = 'uncertain'

const [uncertain, certain] = _.partition(_.keys(data), key => data[key] === value)

console.log(uncertain)
console.log(certain)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

于 2020-01-30T19:03:09.290 回答
1

尝试这样的事情:

const data  = { 
  player1: 'healthy',
  player4: 'ready',
  player2: 'uncertain',
  player3: 'uncertain' 
}

result = _.pickBy(data, (value) => _.startsWith(value, "uncert"));
于 2020-01-30T20:31:16.520 回答
0

我不确定我是否理解得很好,但应该没有lodash:

const data = {
  player1: 'healthy',
  player4: 'ready',
  player2: 'uncertain',
  player3: 'uncertain'
}

const prefix = 'uncert'

const result = Object.keys(data).reduce(
  (lists, player) => (lists[!Number(data[player].includes(prefix)) % 2].push(player), lists),
  [[], []]
)

console.log('players with ' + prefix, result[0])
console.log('players without ' + prefix, result[1])

于 2020-01-30T18:43:50.603 回答