构建javascript数组但具有空值

时间:2012-03-15 18:32:07

标签: javascript jquery json

Json String :(回复)

{"19":{"id":"19","name":"Product","sku":123,"price":"59.50","cost":"25.00"},"20":{"id":"20","name":"Test","sku":456,"price":"50.00","cost":"40.00"}}

JavaScript代码:

  var json = $.parseJSON(response);
  var items = new Array();

  $.each(json, function(index, value){
    items[index] = value.id;
  });

  console.log(items);
  // returns  [ , , , , , , , , , , , , , , , , , , , 19, 20 ]    

我有一个JSON对象,它最初是从php数组构建的,并使用json_encode进行转换。当我遍历对象 - 基于某些值构建一个新数组时,它与所有第一个项一样为null,然后最后两个具有实际的id。

任何想法我做错了什么?

4 个答案:

答案 0 :(得分:2)

这是因为您正在为items使用数组。设置items[19]时,需要先设置值0-18(这些是“空”值)。这是因为JavaScript没有关联数组,只有数字。

请尝试使用items的对象。

var items = {};

$.each(json, function(index, value){
  items[index] = value.id;
});

console.log(items); // {19: 19, 20: 20}

P.S。数组中的“null”项实际上是undefined

答案 1 :(得分:2)

在使用对象的索引时,您将创建一个稀疏数组。该对象具有名为“19”和“20”的属性,当您将它们用作数组中的索引时,您将从属性中获取值。

如果您想要从数组的开头打包项目,只需push

$.each(json, function(index, value){
  items.push(value.id);
});

结果items

[ "19", "20" ]

答案 2 :(得分:1)

如果可能,您还可以将JSON响应更改为数组:

[
  {"id":"19","name":"Product","sku":123,"price":"59.50","cost":"25.00"},
  {"id":"20","name":"Test","sku":456,"price":"50.00","cost":"40.00"}
]

答案 3 :(得分:0)

来自MDN

  

当属性是有效的数组索引并且该索引超出数组的当前边界时,在JavaScript数组上设置属性时,数组将增大到足以容纳该索引处的元素的大小,并且引擎将相应地更新数组的长度属性:

您正在将数组[19]设置为一个值,因此数组[0-18]变为未定义。

要解决此问题,请将项目声明为对象,可以在不自动填充较低范围的情况下指定数字属性。