2014-10-08 74 views
1

我有以下代码:我应该使用JSON数组还是对象?

$.each(orderedqty, function(priority, quantity) { 

    // for each priority 

    if ($(".switch[data-priorityid=" + priority + "]").attr("data-state") == "on") { 

     // this priority is checked 

     orderedqtyArray[ priority ] = 15; 

    } else { 

     orderedqtyArray[ priority ] = 10; 

    } 

}); 

console.info(orderedqtyArray); 
console.info(JSON.stringify(orderedqtyArray)); 

问题是这样的代码返回:

[77:15,78:15]
[NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, 0,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,15,15]

[78:15]
[null,null,null,null,null,null,null,null,null,null,null,null, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,15]

取而代之的是漂亮的JSON :(

+0

所以你创建一个sparce阵列,当你将其转换成JSON你......一个sparce阵列。有什么问题? – Quentin 2014-10-08 09:46:16

+0

'orderedqty'看起来像?你能分享它 – Navin 2014-10-08 09:46:16

+0

这是一个美丽的JSON,一切都很正常:) – xShirase 2014-10-08 09:48:44

回答

6

浏览器的console.log输出经过优化以删除空值,但它是相同的数组。 JSON不能这样做,它总是包含数组中的所有空值。

如果您希望字符串输出看起来更像console.log,那么您需要将其定义为对象而不是数组。

var a = [], b = {}; 
a[5] = 1; 
b[5] = 1; 
console.log(JSON.stringify(a)); 
console.log(JSON.stringify(b)); 

输出将是

[null, null, null, null, null, 1] 
{"5": 1} 
2

如果你只是想删除空值,你可以做:

JSON.stringify(orderedqtyArray.filter(function(e){return e})); 
+0

但是没有任何意义,我们应该避免获取这些空值。 – Artemis 2014-10-08 09:52:02

+0

完美!!!感谢 – juanpscotto 2016-12-16 12:30:07

3

有些奇怪。但是你应该知道Js中数组的有趣行为。

如果定义是这样的:

var array = []; 
//defining item at arbitrary position 
array[5] = 5; 


// output from array will look something like this 
[undefined, undefined, undefined, undefined, 5] 

因此,也许你orderedqtyArray [重点]在一些随机指标设定值,它会导致问题。 因为如果你有正常的数组,它肯定会被串流化为有效的json。

+0

+ 1,请参阅上面的我的评论 - 你正在使用整数作为你的键在orderedqtyArray中,因此使JavaScript认为你想要一个数组(或者你可以)。 – 2014-10-08 09:53:04

+0

确定它可能是一个对象。 – Artemis 2014-10-08 09:55:29