减少对象和嵌套对象:javascript

苏海尔·穆塔兹·阿万

我在尝试减少数据流时一直面临编码问题。下面是示例代码

数据在交换的基础上被过滤,现在我需要过滤掉未在对数组中给出的对。

//data stream
var dataStream = {
  "Coinbase": { "pairs": { "ETH": ["USD", "GBP", "BTC"], "DAI": ["USDC"], "LTC": ["GBP", "BTC", "USD", "EUR"], "ETC": ["EUR", "BTC", "USD"] } },
  "Binance": { "pairs": { "ETH": ["USD", "BTC"], "DAI": ["USDC"], "LTC": ["GBP", "BTC"], "ETC": ["EUR"] } },
  "CoinCorner": { "pairs": { "BTC": ["GBP", "EUR","LTC"] } }
};
//allowed exchages
    var exchanges = ["Coinbase", "Binance", "Bitstamp"];
//allowed pairs
var pair = ["BTC","ETH","LTC"];

const filtered = Object.keys(dataStream)
  .filter(key => exchanges.includes(key))
  .reduce((obj, key) => {
    obj[key] = dataStream[key].pairs;//do some reduction
    return obj;
  }, {});

console.log("data filtered:" + JSON.stringify(filtered));

我需要减少“对”数组的基础上的结果,其中包含对只能到达对象。

更新结果必须是

var dataStream = {
        "Coinbase": { "pairs": { "ETH": ["USD", "GBP", "BTC"], "LTC": ["GBP", "BTC", "USD", "EUR"] } },
          "Binance": { "pairs": { "ETH": ["USD", "BTC"], "LTC": ["GBP", "BTC"]} }
       };

如果有人可以提供帮助或提供线索,我将不胜感激。谢谢你的时间。

尼基尔·阿加瓦尔

您可以尝试使用Object.entriesArray.includesArray.reduce

var dataStream = {"Coinbase": { "pairs": { "ETH": ["USD", "GBP", "BTC"], "DAI": ["USDC"], "LTC": ["GBP", "BTC", "USD", "EUR"], "ETC": ["EUR", "BTC", "USD"] } },"Binance": { "pairs": { "ETH": ["USD", "BTC"], "DAI": ["USDC"], "LTC": ["GBP", "BTC"], "ETC": ["EUR"] } },"CoinCorner": { "pairs": { "BTC": ["GBP", "EUR"] } }};

var exchanges = ["Coinbase", "Binance", "Bitstamp"];
var pair = ["BTC","ETH","LTC"];

let result = Object.entries(dataStream).reduce((a,[k,v]) => {
  if(exchanges.includes(k)) {
    a[k] = Object.entries(v.pairs).reduce((ac,[kc,vc]) => {
      if(pair.includes(kc)) ac[kc] = vc;
      return ac;
    },{});
  }
  return a;
}, {});
console.log(result);

或者您可以简单地将 for 循环与Array.includes一起使用

var dataStream = {"Coinbase": { "pairs": { "ETH": ["USD", "GBP", "BTC"], "DAI": ["USDC"], "LTC": ["GBP", "BTC", "USD", "EUR"], "ETC": ["EUR", "BTC", "USD"] } },"Binance": { "pairs": { "ETH": ["USD", "BTC"], "DAI": ["USDC"], "LTC": ["GBP", "BTC"], "ETC": ["EUR"] } },"CoinCorner": { "pairs": { "BTC": ["GBP", "EUR"] } }};

var exchanges = ["Coinbase", "Binance", "Bitstamp"];
var pair = ["BTC","ETH","LTC"];

let result = {};

for (let exchange in dataStream) {
  if(exchanges.includes(exchange)) {
      result[exchange] = {};
      for (let p in dataStream[exchange].pairs) {
        if(pair.includes(p)) result[exchange][p] = dataStream[exchange].pairs[p];
      }
  }
}

console.log(result);

编辑

根据所需的更新结果,您可以尝试以下操作。请注意,将对数组转换为对象有助于提高性能,因为它避免了includes每次搜索时都使用操作。

var dataStream = {"Coinbase": { "pairs": { "ETH": ["USD", "GBP", "BTC"], "DAI": ["USDC"], "LTC": ["GBP", "BTC", "USD", "EUR"], "ETC": ["EUR", "BTC", "USD"] } },
  "Binance": { "pairs": { "ETH": ["USD", "BTC"], "DAI": ["USDC"], "LTC": ["GBP", "BTC"], "ETC": ["EUR"] } },
  "CoinCorner": { "pairs": { "BTC": ["GBP", "EUR","LTC"] } }};

var exchanges = ["Coinbase", "Binance", "Bitstamp"];
var pair = ["BTC","ETH","LTC"];
let pairObj = pair.reduce((a,c) => Object.assign(a, {[c] : c}), {});

for (let d in dataStream) {
  if(exchanges.includes(d)) {
    let pairs = dataStream[d].pairs;
    for(let p in pairs) {
      // if the pair exists in pairObj proceed to check in its value, else remove from object 
      if(pairObj[p]) { 
        // filter the values based on entries in pairObj
        let r = pairs[p].filter(v => pairObj[v]);
        // If there was existing value, update the object else remove it from object
        if(r.length) pairs[p] = r;
        else delete pairs[p];
      } else delete pairs[p];
    }
  } else delete dataStream[d];
}
console.log(dataStream);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在嵌套对象上反应减少和替换

来自分类Dev

使用JavaScript映射和减少JSON对象

来自分类Dev

在javascript中过滤和减少对象

来自分类Dev

减少JavaScript对象

来自分类Dev

基于Javascript的嵌套循环和对象

来自分类Dev

JavaScript:比较对象数组和嵌套对象数组

来自分类Dev

如何使用JavaScript类增加和减少对象中的值?

来自分类Dev

在 Javascript 中的对象数组中映射和减少数组

来自分类Dev

Javascript-减少返回对象对象的方法

来自分类Dev

减少JavaScript中的对象数组

来自分类Dev

嵌套对象和聚合

来自分类Dev

JavaScript嵌套对象变量

来自分类Dev

Javascript动态嵌套对象

来自分类Dev

通过键减少数组对象并返回嵌套对象

来自分类Dev

在javascript数组中查找和修改深度嵌套的对象

来自分类Dev

javascript中的嵌套对象范围和动态引用

来自分类Dev

在javascript数组中查找和修改深层嵌套的对象

来自分类Dev

比较和减少复杂的对象数组

来自分类Dev

如何映射和减少对象数组?

来自分类Dev

减少以日期为键的对象的JavaScript数组?

来自分类Dev

Javascript - 减少到一个对象

来自分类Dev

减少或改造 MySQL 查询、Javascript 的对象结果

来自分类Dev

Javascript解析嵌套的JSON对象

来自分类Dev

是否可以嵌套JavaScript对象?

来自分类Dev

JavaScript中对象的多级嵌套

来自分类Dev

遍历Javascript中的嵌套对象

来自分类Dev

Javascript设置嵌套对象键

来自分类Dev

遍历JavaScript中的嵌套对象

来自分类Dev

对象javascript中的嵌套函数