【问题标题】:Javascript map and conslidate object array [closed]Javascript映射和合并对象数组[关闭]
【发布时间】:2022-01-23 22:22:34
【问题描述】:

我正在使用一个对象数组,例如:

const data = [
{"Bucket":1, "Currency": "USD", "xt":8465, "yt":3545}
{"Bucket":2, "Currency": "EUR", "xt":63, "yt":71}
{"Bucket":3, "Currency": "JPY", "xt":48, "yt":56}
{"Bucket":4, "Currency": "CAD", "xt":89}
{"Bucket":1, "xt":9256, "yt":3865}
{"Bucket":2, "xt":63, "yt":74}
{"Bucket":3, "xt":46, "yt":57}
{"Bucket":4, "xt":90}
]

很难将上面的数组合并成这样的:

const data = [
{"Bucket":1, "Currency": "USD", "xt":{8465,9256}, "yt":{3545,3865}}
{"Bucket":2, "Currency": "EUR", "xt":{63,63}, "yt":{71,74}}
{"Bucket":3, "Currency": "JPY", "xt":{48,46}, "yt":{56,57}}
{"Bucket":4, "Currency": "CAD", "xt":{89,90}}
]

【问题讨论】:

  • 请分享您的尝试?带来更好的响应
  • "xt" : {8465, 9256} 是不可能的。你必须有一个 key-value 对象对,或者将它们作为数组
  • 对不起,我的意思是 "xt" : { "Current" : 8465, "Compare": 9256}

标签: javascript arrays typescript


【解决方案1】:

您可以执行以下操作:

function combineXtYt(data) {
  const result = [];

  for(let i=0, j=0; i<data.length; i++) {
    const isPresentIndex = result.findIndex((needle) => needle.Bucket === data[i].Bucket);
    if(isPresentIndex >= 0) {
      result[isPresentIndex].xt = { Current: result[isPresentIndex].xt, Compare: data[i].xt}
      result[isPresentIndex].yt = { Current: result[isPresentIndex].yt, Compare: data[i].yt}
    } else {
      result[j++] = {...data[i]};
    }
  }
 return result;
}


const data = [
{"Bucket":1, "Currency": "USD", "xt":8465, "yt":3545},
{"Bucket":2, "Currency": "EUR", "xt":63, "yt":71},
{"Bucket":3, "Currency": "JPY", "xt":48, "yt":56},
{"Bucket":4, "Currency": "CAD", "xt":89, "yt":97},
{"Bucket":1, "xt":9256, "yt":3865},
{"Bucket":2, "xt":63, "yt":74},
{"Bucket":3, "xt":46, "yt":57},
{"Bucket":4, "xt":90, "yt":95}
]

console.log(combineXtYt(data))

注意:我相信,这可以针对时间复杂度进行进一步优化,但这应该可以帮助您入门。

【讨论】:

    【解决方案2】:

    您可以使用reducefind 方法来做到这一点,如下所示:

    const data = [
    {"Bucket":1, "Currency": "USD", "xt":8465, "yt":3545},
    {"Bucket":2, "Currency": "EUR", "xt":63, "yt":71},
    {"Bucket":3, "Currency": "JPY", "xt":48, "yt":56},
    {"Bucket":4, "Currency": "CAD", "xt":89, "yt":97},
    {"Bucket":1, "xt":9256, "yt":3865},
    {"Bucket":2, "xt":63, "yt":74},
    {"Bucket":3, "xt":46, "yt":57},
    {"Bucket":4, "xt":90, "yt":95},
    ];
    
    const result = data.reduce((acc, item) => {
      const bucket = acc.find(v => v.Bucket == item.Bucket);
      if (bucket) { //Bucket exist, just update xt.compare and yt.compare
        bucket.xt.compare = item.xt;
        bucket.yt.compare = item.yt;
      } else {
        acc.push({...item, xt: {current: item.xt}, yt: {current:item.yt} })
      }
      return acc;
    }, []);
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 2019-02-19
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      相关资源
      最近更新 更多