Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 避免在以下情况下嵌套贴图;“旋转”;多维数组_Javascript_Arrays_Data Structures_Functional Programming_Lodash - Fatal编程技术网

Javascript 避免在以下情况下嵌套贴图;“旋转”;多维数组

Javascript 避免在以下情况下嵌套贴图;“旋转”;多维数组,javascript,arrays,data-structures,functional-programming,lodash,Javascript,Arrays,Data Structures,Functional Programming,Lodash,我有格式的数据 [ { "timeline_map": { "2017-05-06": 770, "2017-05-07": 760, "2017-05-08": 1250 ... } }, { "timeline_map": { "2017-05-06": 590, "2017-05-07": 210, "2017-05-08": 300 ...

我有格式的数据

[
  {
    "timeline_map": {
      "2017-05-06": 770,
      "2017-05-07": 760,
      "2017-05-08": 1250
         ...
    }
  },
  {
    "timeline_map": {
      "2017-05-06": 590,
      "2017-05-07": 210,
      "2017-05-08": 300
         ...
    }
  },
  {
    "timeline_map": {
      "2017-05-06": 890,
      "2017-05-07": 2200,
      "2017-05-08": 1032
         ...
    }
  }
]
[
  ["2017-05-06", 770, 590, 890, ...],
  ["2017-05-07", 760, 210, 2200, ...],
  ["2017-05-08", 1250, 300, 1032, ...]
]
为了在谷歌图表中使用,我需要改变格式

[
  {
    "timeline_map": {
      "2017-05-06": 770,
      "2017-05-07": 760,
      "2017-05-08": 1250
         ...
    }
  },
  {
    "timeline_map": {
      "2017-05-06": 590,
      "2017-05-07": 210,
      "2017-05-08": 300
         ...
    }
  },
  {
    "timeline_map": {
      "2017-05-06": 890,
      "2017-05-07": 2200,
      "2017-05-08": 1032
         ...
    }
  }
]
[
  ["2017-05-06", 770, 590, 890, ...],
  ["2017-05-07", 760, 210, 2200, ...],
  ["2017-05-08", 1250, 300, 1032, ...]
]
我写了以下内容来进行转换

let mapped = _.map(
  chartData.results[0].timeline_map, (timestampVal, timestampKey) => (
  [timestampKey].concat(
    _.map(
      chartData.results, lineData => (
        lineData.timeline_map[timestampKey]
        )
      )
    )
  )
)
这是可行的,但我认为嵌套
映射
s不是一个好主意,因为它将通过映射数组长度的平方增加循环量。这里有没有更好的方法来达到预期的效果


您可以在哈希表上使用闭包,并相应地将值分配给日期键

var数据=[{时间线图:{“2017-05-06”:770,“2017-05-07”:760,“2017-05-08”:1250},{时间线图:{“2017-05-06”:590,“2017-05-07”:210,“2017-05-08”:300},{时间线图:{“2017-05-06”:890,“2017-05-07”:2200,“2017-05-08”:1032}],
分组=数据.reduce(函数(散列){
返回函数(r,o){
Object.keys(o.timeline\u map).forEach(函数(k){
如果(!散列[k]){
散列[k]=[k];
r、 push(散列[k]);
}
hash[k].push(o.timeline_-map[k]);
});
返回r;
};
}(Object.create(null)),[]);
控制台日志(分组)

.as console wrapper{max height:100%!important;top:0;}
您可以在哈希表上使用闭包,并相应地将值分配给日期键

var数据=[{时间线图:{“2017-05-06”:770,“2017-05-07”:760,“2017-05-08”:1250},{时间线图:{“2017-05-06”:590,“2017-05-07”:210,“2017-05-08”:300},{时间线图:{“2017-05-06”:890,“2017-05-07”:2200,“2017-05-08”:1032}],
分组=数据.reduce(函数(散列){
返回函数(r,o){
Object.keys(o.timeline\u map).forEach(函数(k){
如果(!散列[k]){
散列[k]=[k];
r、 push(散列[k]);
}
hash[k].push(o.timeline_-map[k]);
});
返回r;
};
}(Object.create(null)),[]);
控制台日志(分组)

.as控制台包装{max height:100%!important;top:0;}
使用
.mergeWith()
合并对象,然后将结果对象合并到数组中:

const arr=[{
“时间线图”:{
"2017-05-06": 770,
"2017-05-07": 760,
"2017-05-08": 1250
}
},
{
“时间线图”:{
"2017-05-06": 590,
"2017-05-07": 210,
"2017-05-08": 300
}
},
{
“时间线图”:{
"2017-05-06": 890,
"2017-05-07": 2200,
"2017-05-08": 1032
}
}
];
const result=u.map(u.mergeWith({},…arr,(o1,o2)=>{
if(Array.isArray(o1)){
o1.推动(o2)
返回o1;
}
如果(u.isNumber(o2)){
返回[o2];
}
}).timeline_map,(v,k)=>[k,…v]);
控制台日志(结果)

使用
.mergeWith()
合并对象,然后
.map()
将结果对象合并到数组中:

const arr=[{
“时间线图”:{
"2017-05-06": 770,
"2017-05-07": 760,
"2017-05-08": 1250
}
},
{
“时间线图”:{
"2017-05-06": 590,
"2017-05-07": 210,
"2017-05-08": 300
}
},
{
“时间线图”:{
"2017-05-06": 890,
"2017-05-07": 2200,
"2017-05-08": 1032
}
}
];
const result=u.map(u.mergeWith({},…arr,(o1,o2)=>{
if(Array.isArray(o1)){
o1.推动(o2)
返回o1;
}
如果(u.isNumber(o2)){
返回[o2];
}
}).timeline_map,(v,k)=>[k,…v]);
控制台日志(结果)

[“2017-05-06”:770590890,…]
这不是有效的JS。无论是
[“2017-05-06”、…]、[“2017-05-07”、…]
还是
{“2017-05-06”:[…]、“2017-05-07”:[…]
。这是哪一个?@Thomas这只是一个省略号,表示还有更多的日期。链接的JSBIN没有任何类似的伪元素。我不是说省略号,我是说
@Thomas-Ah。哎呀。更正。谢谢对象的一维数组。
[“2017-05-06”:770590890,…]
这不是有效的JS。无论是
[“2017-05-06”、…]、[“2017-05-07”、…]
还是
{“2017-05-06”:[…]、“2017-05-07”:[…]
。这是哪一个?@Thomas这只是一个省略号,表示还有更多的日期。链接的JSBIN没有任何类似的伪元素。我不是说省略号,我是说
@Thomas-Ah。哎呀。更正。谢谢一维对象数组。这是正确的方法,但只需要再向前一步就可以得到想要的结果。@Redu,你知道想要的结果吗?o其他参数由reduce方法提供。这些
(Object.create(null)),[])
对象。create(null)
在闭包中初始化
散列
。空数组是结果数组的起始值。这是正确的方法,但只需再向前一步即可得到所需的结果。@Redu,您知道所需的结果吗?o其他参数由reduce方法提供。这些
(Object.create(null)),[])
对象。create(null)
在闭包中初始化
散列
。空数组是结果数组的起始值。+1表示干净的溶液。只需指出,在数组达到一定大小后,spread运算符将开始给出调用堆栈溢出错误。+1表示非常干净的解决方案。只是指出,在数组达到一定大小后,spread运算符将开始给出调用堆栈溢出错误。