代码之家  ›  专栏  ›  技术社区  ›  John V

从将数组作为条目的映射创建JSON字符串

  •  0
  • John V  · 技术社区  · 6 年前

    我的数据结构对象是具有以下结构的映射:

    {
      "2018-09-25":[0,1,2,0,8],
      "2018-10-17":[0,2,0,0,0],
      "2018-10-26":[0,2,1,0,0],
      "2018-10-29":[0,2,2,1,0],
      "2018-10-31":[0,3,2,1,0],
      "2018-11-01":[0,3,3,1,0],
      "2018-11-02":[0,4,4,1,0]
    }
    

    我用 JSON.stringify 然后 JSON.parse . 但是,我需要以某种方式命名元素,以便引用它们(例如,绘制图表时)。 我尝试了以下方法,但我得到了 NaN 作为一个值。

    data = Object.keys(data).map(function (k) { 
            return {date: new Date(k), value: +data[k]};
          });
    

    我想要这样的东西:

    密钥:“2018-09-25”
    1:0
    2∶1
    3:2
    4:0
    5:8

    1 回复  |  直到 6 年前
        1
  •  0
  •   Mark    6 年前

    因为你在使用 map() 看起来您需要一个数组作为最终结果。但是,由于数组的大小不同, MAP() 不太管用。可以使用reduce将内部数组展平为一个大数组:

    let o = {"2018-09-25":[0,1,2,0,8],
             "2018-10-17":[0,2,0,0,0],
             "2018-10-26":[0,2,1,0,0],
             "2018-10-29":[0,2,2,1,0],
             "2018-10-31":[0,3,2,1,0],
             "2018-11-01":[0,3,3,1,0],
             "2018-11-02":[0,4,4,1,0]
            }
    let newAr = Object.entries(o).reduce((arr, [key, values]) => {
        return arr.concat(values.map(n => ({date: new Date(key), value: n})))
    }, [])
    
    console.log(newAr)

    这就是你想要的吗?