【问题标题】:Filter JSON API response过滤 JSON API 响应
【发布时间】:2021-05-06 15:44:45
【问题描述】:

我正在使用node-binance-api 提取一些币安余额数据。 API 调用返回所有货币,我想过滤它以仅包含我有余额的货币。

代码:

  await binance.balance((error, balances) => {
    if ( error ) return console.error(error);
    console.log(balances);
    var filtered = _.filter(balances, function(b) {return b.available > 0})
    console.log(filtered);
  });

第一个console.log按预期返回所有数据:

  RENBTC: { available: '0.00000000', onOrder: '0.00000000' },   
  SLP: { available: '0.00000000', onOrder: '0.00000000' },   
  STRAX: { available: '0.00000000', onOrder: '0.00000000' },   
  ...

我预计第二个 console.log 会返回硬币名称和余额,但它只返回余额:

[
  { available: '0.03993250', onOrder: '0.00000000' },
  { available: '8.11227680', onOrder: '0.00000000' }
]

过滤后如何获取硬币符号?

【问题讨论】:

    标签: node.js json


    【解决方案1】:

    Lodash 的_.filter,即使传递了一个对象,也会返回一个数组。

    _.filter

    遍历集合的元素,返回一个包含所有元素的数组,谓词返回真值。

    如果您想要一个格式相同但“过滤”的对象,一种方法是迭代对象的键,测试该属性值,然后分配或不分配给新对象。

    const balances = {
      RENBTC: { available: '0.00000000', onOrder: '0.00000000' },   
      SLP: { available: '0.00000000', onOrder: '0.00000000' },   
      STRAX: { available: '0.00000000', onOrder: '0.00000000' },   
      XXX: { available: '0.03993250', onOrder: '0.00000000' },
      YYY: { available: '8.11227680', onOrder: '0.00000000' }
    };
    
    const filtered = {};
    for (const k of Object.keys(balances)) {
      if (balances[k].available > 0) {
       filtered[k] = balances[k];
      }
    }
    
    console.dir(filtered);

    另一种方法是 delete 对象中不需要的属性,但如果不先复制对象,这将是破坏性的。

    【讨论】:

      猜你喜欢
      • 2021-06-03
      • 1970-01-01
      • 2021-08-02
      • 2020-08-09
      • 2018-12-03
      • 2019-05-25
      • 2021-03-10
      • 2019-08-02
      • 2023-03-04
      相关资源
      最近更新 更多