2016-08-16 2 views
0

私は小さな問題を持っているが、それは動作するはずです私のためにit.Asを解決することはできませんが、私は何かを欠場:この部分のITの仕事に配列をプッシュすると間違った項目が追加されます。 JavaScriptの

function reorderItems(items, firstId) { 
     var orderedItems = []; 
     //I pass just 2 objects !!! 
     console.log(items[0]); // Object {children: Array[0], metadata: Array[6], state: Object, id: 226} 
     console.log(items[1]); // Object {children: Array[0], metadata: Array[6], state: Object, id: 216} 
     console.log(firstId); // 216 
     var firstItem ; 
     for (var i = 0; i<items.length; i++) { 
      if (items[i].id == firstId) { 
       firstItem = items[i]; 
      } 
     } 
     orderedItems.push(firstItem); 
     console.log(orderedItems); // [Object] - length 1 !!!! 

    } 

: ここではangularJsコントローラのいずれかにjsのコードです良い。 enter image description here 同じ 'firstItem'をもう一度押すと

 orderedItems.push(firstItem); 
     console.log(orderedItems); 

なぜですか?私は最初に配列216を置く必要があります。 enter image description here

+0

ここで問題を実証するスタックスニペット( '<>'ツールバーボタン)を作成してください。あなたは[この問題](http://stackoverflow.com/questions/38660832/element-children-has-elements-but-returns-empty-htmlcollection)にぶち当たっているかもしれませんが、上記からわかりません。 –

+1

あなたのループについての注意点:1.アイテムを見つけた後でも、それは意図的なものですか?たとえば、これらの「ID」は実際にはユニークではなく、最後のIDが必要ですか? 2.何も見つからなければ、 'orderedItems'配列に' undefined'を送ります。あなたはそれをしたいですか? –

答えて

1

この機能を試してください。 $ filterを使用して最初の値を取り出し、残りの値を追加します。

function reorderItems(items, firstId) { 
     var orderedItems = []; 

     var firstItem = $filter('filter')(items, {id: firstId})[0]; 
     orderedItems.push(firstItem); 

     for (var i = 0; i<items.length; i++) { 
      if (items[i].id != firstId) { 
       orderedItems.push(items[i]); 
      } 
     }   
    } 
関連する問題