我应该使用JSON数组还是对象?

时间:2014-10-08 09:43:15

标签: javascript arrays json null

我有以下代码:

$.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,NULL,NULL,NULL,NULL,NULL,NULL,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,NULL,NULL,NULL,NULL ,NULL,NULL,NULL,15]

而不是一个美丽的json :(

3 个答案:

答案 0 :(得分:6)

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

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

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}

答案 1 :(得分: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 [priority]设置一些随机索引的值,这会导致问题。 因为如果你有正常的数组,它肯定会串行化为有效的json。

答案 2 :(得分:2)

如果您只想删除空值,可以执行以下操作:

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