【问题标题】:Filter object data by value按值过滤对象数据
【发布时间】:2020-01-30 18:17:16
【问题描述】:

给定以下数据

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

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

可能的解决方案

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

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

【问题讨论】:

  • 你有理由必须使用lodash而不是JS的原生过滤功能吗?
  • @NicholasSiegmundt 在一个主要是 lodash 的代码库中工作,所以要保持一致
  • _.filter(data, {name: 'uncertain'});
  • @AmirAfghani 似乎不起作用
  • 你忘了用_.startsWith(value, "uncert"),看看我的回答,希望对你有帮助。

标签: javascript lodash


【解决方案1】:

试试这样的:

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

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

【讨论】:

  • 这行得通,现在我如何获得所有不确定的值。我可以使用_.difference 吗?
  • 我不知道我是否理解了你想要什么,但你可以拒绝这样的表达:result = .pickBy(data, (value) => ! i>.startsWith(value, "uncert"));
【解决方案2】:

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

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>

【讨论】:

【解决方案3】:

我不确定我是否理解得很好,但应该没有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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2016-07-19
    相关资源
    最近更新 更多