数组长度显示不正确

时间:2016-11-17 06:47:37

标签: javascript arrays react-native

我正在使用React Native创建一个应用,并希望使用节标题创建<ListView>。我一直在关注一些描述如何做的不同帖子,我遇到了一个奇怪的问题:

创建<ListView>的一部分是创建两个数组:一个是Sections的ID数组,另一个是由Row ID组成的数组数组。顶层的两个数组应该包含相同数量的元素。

我正在从json数据创建数组:

[
  {
    "id": 12,
    "name": "Surfhouse 1",
    "guests": [
      {
        "id": 100,
        "name": "Oliver Nicholson",
        "email": "oldo.nicho123@gmail.com",
        "age": "32"
      },
      {
        "id": 101,
        "name": "Nollie Bollie",
        "email": "noldo.nicho1234@gmail.com",
        "age": "20"
      },
      {
        "id": 102,
        "name": "Wootang",
        "email": "oldo.nicho3@gmail.com",
        "age": "57"
      }
    ]
  },
  {
    "id": 25,
    "name": "Surfhouse 2",
    "guests": [
      {
        "id": 200,
        "name": "Alycia Woot",
        "email": "aly.woot@gmail.com",
        "age": "32"
      },
      {
        "id": 201,
        "name": "Tim Jang",
        "email": "noldo.nicho@gmail.com",
        "age": "20"
      },
      {
        "id": 202,
        "name": "Hootenany Yeah",
        "email": "oldo.nicho123@gmail.com",
        "age": "57"
      }
    ]
  }
]

然后使用以下函数映射出来(其中accommodation是导入的json数据):

const formatDataForListView = accommodation => {
      const dataBlob = {};
      const sectionIDs = [];
      const rowIDs = [];

      accommodation.forEach((accom) => {
        sectionIDs.push(accom.id);
        dataBlob[accom.id] = accom.name;
        rowIDs[accom.id] = []; // initialise empty array associated with Section ID
        accom.guests.forEach((guest) => {
          rowIDs[accom.id].push(guest.id);
          dataBlob[accom.id + ':' + guest.id] = guest;
        });
      });

一切似乎都很好:我得到了预期的数组,但出于某种原因RowIDs数组有length: 26时(我相信)它应该只有2。

enter image description here

rowIDs数组的长度是多少?

2 个答案:

答案 0 :(得分:1)

因为您在索引12处有一个值,在索引为25时有一个值。这使得数组的length为26,因为它采用最大的索引并为长度添加一个,因为该数组基于零。

如果您只想要这两个项目,那么请使用索引01而不使用备用项目,或使用带有密钥的对象。

更深入阅读:Relationship between length and numerical properties

答案 1 :(得分:0)

我建议rowID最好是对象。初始化数组的特定索引不是一个好习惯,我们有key =&gt;的对象。价值目的。如果初始化数组中的特定索引,它会将所有以前的索引设置为undefined,这是不好的。使用对象的实现在普通的javascript -

中看起来像这样

&#13;
&#13;
rand_win.o and c_zlib.o
&#13;
&#13;
&#13;