【问题标题】:How to swap Object keys/values into Array? [duplicate]如何将对象键/值交换为数组? [复制]
【发布时间】:2022-03-05 17:26:05
【问题描述】:

我有一个包含地址和数字的大对象。

{
  '0x2bac18ad331A3137AbEC3a029dBb3A6cC25835ea': 1,
  '0x22Bf3f4EA7862739024C122aDDd2FB2981c076a7': 3,
  '0x9E6E8b584F26503C84661674dCD7821099c8a51d': 1,
  '0x37D74ca0F842817C6FC4Ea267cF2d49DEa0C06a8': 1,
  '0xDf92913902087aD0Bfac39659B60CebE1100595a': 1
// ...
}

我尝试交换键/值并将所有具有相同数值的地址存储在一个数组中,考虑如下:

var newObj = {
 "1": [addr1, addr2, addr3],
 "2": [addr1, addr2, addr3],
 "3": [addr1, addr2, addr3]
//...
}

我找到了这样的交换方式:

function swaptoArray(json){
    var ret = {};
    for(var key in json){
    ret[json[key]] = key;
    }
    return ret;
  }

但我无法将值部分设为包含许多地址的数组。 我试过这个,但不明白错误的结果。有什么提示吗?

function swaptoArray(json){
    var ret = {};
    var newArray = [];

    for(var key in json){

      ret[json[key]] = newArray.push(key);

    }
    return ret;
  }

结果:

{ '1': 5, '3': 2 }

【问题讨论】:

  • newArray.push(key) 返回数组的新长度

标签: javascript arrays object


【解决方案1】:

这是使用Object.entries的解决方案:

const obj = {
  '0x2bac18ad331A3137AbEC3a029dBb3A6cC25835ea': 1,
  '0x22Bf3f4EA7862739024C122aDDd2FB2981c076a7': 3,
  '0x9E6E8b584F26503C84661674dCD7821099c8a51d': 1,
  '0x37D74ca0F842817C6FC4Ea267cF2d49DEa0C06a8': 1,
  '0xDf92913902087aD0Bfac39659B60CebE1100595a': 1
}

const objArr = Object.entries(obj)

function getArray(key) {
  let ret = []
  objArr.forEach(item => {
    if(item[1] === key) ret.push(item[0])
  })  
  return ret
}

function swaptoArray(json) {
  let ret = {}
  for (let key in json) {
    const newKey = json[key]
    ret[newKey] = getArray(newKey)
  }
  return ret
}

console.log(swaptoArray(obj))

【讨论】:

    【解决方案2】:

    您需要一个数组作为结果,每个值作为结果的键。

    function group(object) {
        const result = {};
        for (const key in object) (result[data[key]] ??= []).push(key);
        return result;
    }
    
    const data = {
      '0x2bac18ad331A3137AbEC3a029dBb3A6cC25835ea': 1,
      '0x22Bf3f4EA7862739024C122aDDd2FB2981c076a7': 3,
      '0x9E6E8b584F26503C84661674dCD7821099c8a51d': 1,
      '0x37D74ca0F842817C6FC4Ea267cF2d49DEa0C06a8': 1,
      '0xDf92913902087aD0Bfac39659B60CebE1100595a': 1
    }
    
    console.log(group(data));

    【讨论】:

      猜你喜欢
      • 2019-09-22
      • 2020-11-30
      • 2017-09-23
      • 1970-01-01
      • 2019-01-14
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多