2016-11-17 19 views
2

React Nativeを使用してアプリを作成していて、セクションヘッダー付きで<ListView>にしたいとします。私はそれを行う方法を説明し、私は奇妙な問題に遭遇したいくつかの異なる投稿に従ってきました:配列の長さが正しく表示されない

<ListView>の作成の一部は、1つのセクションのIDの配列ですもう1つは行IDで構成される配列の配列です。最上位の2つの配列は、同じ量の要素を持つ必要があります。

私はJSONデータから配列を作成しています:

順番に
[ 
    { 
    "id": 12, 
    "name": "Surfhouse 1", 
    "guests": [ 
     { 
     "id": 100, 
     "name": "Oliver Nicholson", 
     "email": "[email protected]", 
     "age": "32" 
     }, 
     { 
     "id": 101, 
     "name": "Nollie Bollie", 
     "email": "[email protected]", 
     "age": "20" 
     }, 
     { 
     "id": 102, 
     "name": "Wootang", 
     "email": "[email protected]", 
     "age": "57" 
     } 
    ] 
    }, 
    { 
    "id": 25, 
    "name": "Surfhouse 2", 
    "guests": [ 
     { 
     "id": 200, 
     "name": "Alycia Woot", 
     "email": "[email protected]", 
     "age": "32" 
     }, 
     { 
     "id": 201, 
     "name": "Tim Jang", 
     "email": "[email protected]", 
     "age": "20" 
     }, 
     { 
     "id": 202, 
     "name": "Hootenany Yeah", 
     "email": "[email protected]", 
     "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とすべきである)、それは2にすべきである。

enter image description here

rowIDsアレイの長さはどのように26ですか?

答えて

1

インデックス12の値と、インデックス25の値があるためです。これは、配列がゼロに基づいているため、最大のインデックスをとり、長さに1を加算するため、配列のlengthを26にします。

2つのアイテムだけが必要な場合は、スペアアイテムのないインデックス01を使用するか、キーを持つオブジェクトを使用します。深さの読みにおける多くのための

Relationship between length and numerical properties

+1

[OK]を、うん、知っておかなけれ。ありがとう。 –

0

私はROWIDSが良い物であることを示唆しています。配列の特定のインデックスを初期化するのは良い方法ではありません。key => value目的のオブジェクトがあります。配列内の特定のインデックスを初期化すると、前のすべてのインデックスが未定義に設定されますが、これは良くありません。実装使用したオブジェクトは、プレーンJavaScriptで次のようになります -

var data = [ 
 
    { 
 
    "id": 12, 
 
    "name": "Surfhouse 1", 
 
    "guests": [ 
 
     { 
 
     "id": 100, 
 
     "name": "Oliver Nicholson", 
 
     "email": "[email protected]", 
 
     "age": "32" 
 
     }, 
 
     { 
 
     "id": 101, 
 
     "name": "Nollie Bollie", 
 
     "email": "[email protected]", 
 
     "age": "20" 
 
     }, 
 
     { 
 
     "id": 102, 
 
     "name": "Wootang", 
 
     "email": "[email protected]", 
 
     "age": "57" 
 
     } 
 
    ] 
 
    }, 
 
    { 
 
    "id": 25, 
 
    "name": "Surfhouse 2", 
 
    "guests": [ 
 
     { 
 
     "id": 200, 
 
     "name": "Alycia Woot", 
 
     "email": "[email protected]", 
 
     "age": "32" 
 
     }, 
 
     { 
 
     "id": 201, 
 
     "name": "Tim Jang", 
 
     "email": "[email protected]", 
 
     "age": "20" 
 
     }, 
 
     { 
 
     "id": 202, 
 
     "name": "Hootenany Yeah", 
 
     "email": "[email protected]", 
 
     "age": "57" 
 
     } 
 
    ] 
 
    } 
 
]; 
 

 
var rowIDs = {}; 
 
    
 
data.forEach(function(element) { 
 
    rowIDs[element.id] = []; 
 
    element.guests.forEach(function(guest) { 
 
     rowIDs[element.id].push(guest.id); 
 
    }); 
 
}); 
 
console.log(rowIDs);

+0

あなたは死んでいます。ありがとう:-) –

関連する問題