2016-04-21 21 views
0

私はサーバーからオブジェクトの配列の配列を持っていますが、配列全体をそのままdata配列に保持しながら、昇順でuidでソートしようとしています。 data配列には、2つの要素があります。私はそれが配列内のすべての要素の中の1つの配列の中でuidを調べ、要素がdata配列内にどのように配置されるべきかの順序を決定しようとしています。javadriptでオブジェクトの配列を並べ替える

私はlodash使用して、以下を試してみましたが、動作するようには思えませんが、私は私が近づいていますし、いくつかの支援をしたいと思い感じる:オブジェクトの配列から返され

// sort by: 
console.log(res.results[0].data[0].row[1].uid) 

_.forEach(res.results, function(obj) { 
    _.forEach(data, function(anotherObj) { 
    _.forEach(row, function(row) { 
     data.row = _.sortBy(data.row, function(row) { 
     return row[1].uid; 
     }); 
    }); 
    }); 
}); 

ここサーバー:

var res = { 
    results: [{ 
    columns: ['large', 'medium', 'small'], 
    data: [{ 
     row: [{ 
     sid: 13, 
     tid: 427 
     }, 
     { 
      uid: 69, 
      vid: 450, 
      wid: 65 
     }, 
     null], 
     multirow: { 
     nodule: [{ 
      xid: '427', 
      properties: { 
      yid: 13, 
      zid: 427 
      } 
     }, 
      { 
      aid: '450', 
      properties: { 
       uid: 69, 
       bid: 450, 
       cid: 65 
      } 
      }] 
     } 
    }, 
     { 
     row: [{ 
      sid: 13, 
      tid: 427 
     }, 
      { 
      vid: 432, 
      uid: 65, 
      wid: 61 
      }, 
      null], 
     multirow: { 
      nodule: [{ 
      xid: '427', 
      properties: { 
       yid: 13, 
       zid: 427 
      } 
      }, 
      { 
       aid: '432', 
       properties: { 
       bid: 432, 
       uid: 65, 
       cid: 61 
       } 
      }] 
     } 
     }] 
    }], 
    errors: [] 
}; 
+0

あなたの 'row'アレイにはそれぞれ3つの要素があり、そのうちの2つだけがオブジェクトで、そのうちの1つだけが' uid'プロパティを持ちます。 'row'配列、' data'配列、または 'results'配列を正確にソートしたいのですか? – Bergi

+0

コード内の変数は完全に接続されていません。私は、 'row'の代わりに' data'、 'anotherObj.row'の代わりに' obj.data'を意味していたと思います。そして、その内部ループはまったく意味を持たないようです... – Bergi

+0

@Bergi、私のタイプミス。私はその問題を解決します。私がしようとしているのは、データ配列内の要素を 'uid'でソートすることです。そして、はい、あなたは正しい 'uid'が2つの場所の行と複数の行にあります。しかし、私は単なる行の代わりに複数行を使うつもりでした – adbarads

答えて

1

あなたが必要のない多数のループ:あなただけ番目の反復処理する必要が

_.forEach(res.results, function(result) { 
    result.data = _.sortBy(result.data, function(datum) { 
    return datum.row[1].uid; 
    }); 
}); 

結果には、それぞれがソートしようとしているデータ配列があります。 sortByコールバックは、その配列の各要素をとり、比較する値を返すことになっています。

+0

jsfiddleであなたが提案したものを試してみました。 ええ、私はなぜ、私はその配列に入るためにもっと多くのループが必要だと感じたのか分からない。私はロダッシュが私が予想していたよりも重い持ち上げをすると思う。 – adbarads

+0

あなたは3つのレベルの配列を持っていますが、反復しているもの、ソートしているもの、インデックスで直接アクセスしているもの(配列でなければならないかどうかはわかりません)です。 – Bergi