【问题标题】:convert objects array to griddle readable array将对象数组转换为网格可读数组
【发布时间】:2018-05-02 14:42:18
【问题描述】:

我正在使用 ajax 获取 json 数据。然后我想使用 griddle-react 在 Griddle 中输出它。问题是我无法将我的数组转换为 Griddle 可读数组。

在ajax fetch之后我做了一个回调函数:

function convert(obj) {
      console.log(obj);
      Object.keys(obj).forEach(function (key) {
        let format = JSON.stringify(obj[key]);
        console.log(format);
        self.setState(() => ({ data: key[format] }));
      });
    }

第一个 console.log 输出如下所示:

{
    {
      "BTC": {
        "opening_price": "9845000",
        "closing_price": "9967000",
        "min_price": "9814000",
        "max_price": "10047000",
        "average_price": "9928071.5654",
        "units_traded": "7242.04659594",
        "volume_1day": "7242.04659594",
        "volume_7day": "73491.92898643",
        "buy_price": "9967000",
        "sell_price": "9968000"
      },
    }
}

我的函数使它看起来像这样:(第二个 console.log):

{
    "opening_price": "9846000",
    "closing_price": "9965000",
    "min_price": "9814000",
    "max_price": "10047000",
    "average_price": "9929422.0905",
    "units_traded": "7200.46713802",
    "volume_1day": "7200.467F13802",
    "volume_7day": "73395.33311647",
    "buy_price": "9959000",
    "sell_price": "9964000"
  }

我想让它转换成下面的数组,基本上是加上name item,之后Griddle就可以读取了:

{
  "name": "BTC",
  "opening_price": "9845000",
  "closing_price": "9967000",
  "min_price": "9814000",
  "max_price": "10047000",
  "average_price": "9928071.5654",
  "units_traded": "7242.04659594",
  "volume_1day": "7242.04659594",
  "volume_7day": "73491.92898643",
  "buy_price": "9967000",
  "sell_price": "9968000"
},

我在这里做错了什么?我确信它非常接近我想要的,但我现在无法弄清楚。

【问题讨论】:

    标签: javascript reactjs ecma griddle


    【解决方案1】:

    您可以使用Object.entries 来获取键和值。使用Object.assign 制作新对象

    var obj = {
      "BTC": {"opening_price": "9845000","closing_price": "9967000","min_price": "9814000","max_price": "10047000","average_price": "9928071.5654","units_traded": "7242.04659594","volume_1day": "7242.04659594","volume_7day": "73491.92898643","buy_price": "9967000","sell_price": "9968000"}
    }
    
    var newObj = Object.entries(obj).reduce((c, [i, v]) => Object.assign(c, {name: i}, v), {});
    
    console.log(newObj);

    如果你有多个key,可以使用map

    var obj = {
      "BTC": {"opening_price": "9845000","closing_price": "9967000","min_price": "9814000","max_price": "10047000","average_price": "9928071.5654","units_traded": "7242.04659594","volume_1day": "7242.04659594","volume_7day": "73491.92898643","buy_price": "9967000","sell_price": "9968000"},
      "OTH": {"opening_price": "9845000","closing_price": "9967000","min_price": "9814000","max_price": "10047000","average_price": "9928071.5654","units_traded": "7242.04659594","volume_1day": "7242.04659594","volume_7day": "73491.92898643","buy_price": "9967000","sell_price": "9968000"},
    }
    
    var newArr = Object.entries(obj).map(([i, v]) => Object.assign({}, {name: i}, v));
    
    console.log(newArr);

    不包括date属性

    var obj = {
      "KNC": {"opening_price": "2731","closing_price": "2788","min_price": "2693","max_price": "2849","average_price": "2790.5368","units_traded": "3178032.25814499211673","volume_1day": "3178032.25814499211673","volume_7day": "110687333.315264505902311000","buy_price": "2783","sell_price": "2788"},
      "date": "1525269153470"
    }
    
    var newObj = Object.entries(obj).reduce((c, [i, v]) => i !== 'date' ? Object.assign(c, {name: i}, v) : c, {});
    
    console.log(newObj);

    【讨论】:

    • 乐于助人:)
    • 我也可以忽略数组中的一个键吗?这是“日期”,所以输出像 BTC、OTH、日期这样的所有东西,除了日期。
    • 是的,你可以。哪一个适合你?第一个还是第二个?我可以修改为不包含日期属性
    • 其实我没有:) 你最好提供一个示例对象或数组,以便我知道你在使用什么。 @pazta
    • { “KNC”:{ “opening_price”:“2731”,“close_price”:“2788”,“min_price”:“2693”,“max_price”:“2849”,“average_price”: “2790.5368”,“UNITS_TRADED”:“3178032.25814499211673”,“卷_1day”:“3178032.25814499211673”,“音量_7day”:“11068505902311000”,“buy_price”:“2783”,“sell_price”:“2788”},“日期”:“ 1525269153470" } 在整个数组的末尾有一个日期键,我怎么能忽略它?
    【解决方案2】:

    您能否更新您的函数以在其中包含这一行?

    obj[key]["name"] = key

    function convert(obj) {
          console.log(obj);
          Object.keys(obj).forEach(function (key) {
            obj[key]["name"] = key;
            let format = JSON.stringify(obj[key]);
            console.log(format);
            //self.setState(() => ({ bithumbData: key[format] }));
          });
        }
    

    【讨论】:

      【解决方案3】:
      function convert(obj){
          var parentKey = Object.keys(obj)[0];//Getting parent first element key
          obj = obj[parentKey];
          var newObj = {}; //Creating new empty jason object 
          newObj['name'] = parentKey; //key apply as name element to new jason object 
          for(var key in obj) //looping each child element
              newObj[key] = obj[key]; //child applying to new jason object
          return newObj;
      }
      console.log(JSON.stringify(convert(obj)));
      

      【讨论】:

      • 虽然这个 sn-p 可能会回答这个问题,但最好包含一些关于它如何回答问题的上下文以提供更好的答案。
      猜你喜欢
      • 2013-11-16
      • 2021-05-03
      • 2018-12-04
      • 2021-06-16
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      相关资源
      最近更新 更多