鱼C论坛

 找回密码
 立即注册
查看: 2337|回复: 6

[已解决]关于javascript数组的问题

[复制链接]
发表于 2018-9-3 17:43:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wongyusing 于 2018-9-3 17:45 编辑

json数据如下:
  1. {"open":{"0":14.99,"1":15,"2":14.91,"3":14.44,"4":13.8,"5":13.67,"6":14.97,"7":13.95,"8":14.04,"9":14.5,"10":13.6,"11":13.5,"12":13.47,"13":14.01,"14":14.01,"15":14.37,"16":14.2,"17":14.14,"18":14.56,"19":14.25},"close":{"0":15.36,"1":14.9,"2":14.73,"3":13.9,"4":13.62,"5":14.35,"6":14.57,"7":14.01,"8":14.04,"9":14.38,"10":13.6,"11":13.52,"12":14.33,"13":14.22,"14":14.37,"15":14.33,"16":14.21,"17":14.58,"18":14.26,"19":13.95}}
复制代码

我想让这个json数据的格式变成类似下面这种数组形式:
  1. [[1,2],[2,5][5,6],[8,10]]
复制代码
  
我尝试过用push的方法,然后整个数组都变成了Array()对象了。  
这种形式,我在python我知道怎么写,  
但在javascript中,我就蒙比了。  
明明是数组,怎么就变成了Array()对象了呢??
我的js代码如下
  1. for (var key in json['open'],json['close']) {
  2.             oc = [json['open'][key],json['close'][key]]
  3.             //console.log(oc);
  4.             console.log(oc)
  5.             candleChart.push([json['open'][key],json['close'][key]]);

  6.         };
  7.         console.log(candleChart);
复制代码
最佳答案
2018-9-4 11:19:32
1、懂了,目前就是Array对象转换成二维数组[[],[]]

假设你json对象(数组对象也是对象)取值算法没问题(键值对转[]数组),一段例子:
  1.     var data = {0:'14.99',1:'15'};

  2. //    {0: "14.99", 1: "15"}
  3.     console.log(data);


  4.     var arr = Object.values(data);
  5. //    (2) ["14.99", "15"]
  6.     console.log(arr);
复制代码

Snip20180904_209.png


当然这个是普通数组,不过我个人认为不太需要二维数组。

当然也可以转为二维:
  1. var obj = { 0: 14.99, 1: 42 };

  2. //    键数组
  3. var myKeys = Object.values(getObjectKeys(obj)) ;
  4. //值数组
  5. var myValues =  Object.values(getObjectValues(obj));

  6. //合并为一个二维数组
  7.     var final = [];
  8.     for(var i=0;i<myKeys.length;i++){
  9.         final.push([myKeys[i],myValues[i]])
  10.     }
  11.     console.log(final);

  12. //    获得键
  13. function getObjectKeys(object) {
  14.     var keys = [];
  15.     for(var property in object)
  16.         keys.push(property)
  17.     return keys
  18. }
  19. //获得值
  20. function getObjectValues(object) {
  21.     var values = [];
  22.     for(var property in object)
  23.         values.push(object[property])
  24.     return values
  25. }
复制代码

Snip20180904_212.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-4 09:02:17 | 显示全部楼层
1、array在JS中就是数组阿,你已经完成了你的需求了阿:
  1. for (var key in json['open'],json['close']) {
  2.             oc = [json['open'][key],json['close'][key]]
  3.             //console.log(oc);
  4.             console.log(oc)
  5.             candleChart.push([json['open'][key],json['close'][key]]);

  6.         };
  7.         console.log(candleChart);
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-4 10:05:11 | 显示全部楼层
不二如是 发表于 2018-9-4 09:02
1、array在JS中就是数组阿,你已经完成了你的需求了阿:

还没有啊,我是想要它变成数组而不是对象。  
是下面这种形式
  1. [[1,2],[2,5][5,6],[8,10]]
复制代码

不是一个对象。我上面展示的只是一小部分的数据,数据其实有好几百个。  
转化出来是一个对象,而不是一个数组。  
其实javascript中的数组,我习惯称为列表。  
我现在的目的是让上面的json变成列表里面有列表。  
或者说是二维数组
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-4 11:19:32 | 显示全部楼层    本楼为最佳答案   
1、懂了,目前就是Array对象转换成二维数组[[],[]]

假设你json对象(数组对象也是对象)取值算法没问题(键值对转[]数组),一段例子:
  1.     var data = {0:'14.99',1:'15'};

  2. //    {0: "14.99", 1: "15"}
  3.     console.log(data);


  4.     var arr = Object.values(data);
  5. //    (2)&#160;["14.99", "15"]
  6.     console.log(arr);
复制代码

Snip20180904_209.png


当然这个是普通数组,不过我个人认为不太需要二维数组。

当然也可以转为二维:
  1. var obj = { 0: 14.99, 1: 42 };

  2. //    键数组
  3. var myKeys = Object.values(getObjectKeys(obj)) ;
  4. //值数组
  5. var myValues =  Object.values(getObjectValues(obj));

  6. //合并为一个二维数组
  7.     var final = [];
  8.     for(var i=0;i<myKeys.length;i++){
  9.         final.push([myKeys[i],myValues[i]])
  10.     }
  11.     console.log(final);

  12. //    获得键
  13. function getObjectKeys(object) {
  14.     var keys = [];
  15.     for(var property in object)
  16.         keys.push(property)
  17.     return keys
  18. }
  19. //获得值
  20. function getObjectValues(object) {
  21.     var values = [];
  22.     for(var property in object)
  23.         values.push(object[property])
  24.     return values
  25. }
复制代码

Snip20180904_212.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-5 16:14:16 | 显示全部楼层
不二如是 发表于 2018-9-4 11:19
1、懂了,目前就是Array对象转换成二维数组[[],[]]

假设你json对象(数组对象也是对象)取值算法没问题( ...

还不是啦,这样说吧。  
我在搭建一个股票的k线图的项目(练手用的)  
利用了一个叫Highcharts的库进行绘图。  
其实他们已经有了关于股票方面的包,  
但我发现不适合我的数据结构。  
我现在要利用他们的基本图例“柱型范围图”来构建我的图像。  
但这个柱型范围图需要的数据结构是硬生生的列表,如下:
  1. [[1,2],[2,5][5,6],[8,10]]
复制代码

没有其他妖艳贱货的,要纯纯的列表。  
不要其他的信息啊,那些0,1,,2,,3的统统不要。  
我到现在还没搞明白为什么我单纯的想要
  1. [[1,2],[2,5][5,6],[8,10]]
复制代码
  
只是赋值给一个变量后就变成了Array之类的东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-5 16:16:41 | 显示全部楼层
不二如是 发表于 2018-9-4 11:19
1、懂了,目前就是Array对象转换成二维数组[[],[]]

假设你json对象(数组对象也是对象)取值算法没问题( ...

说错了,js中应该叫数组,不叫列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-6 15:44:55 | 显示全部楼层
今天尝试了前后端不分离的做法试了一下。前端利用web框架自带的模板语言传输
  1. [[1,2],[2,5][5,6],[8,10]]
复制代码
   
然后打印仍然会变成Array的数组,好奇怪啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 08:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表