0

次のようなデータが与えられた場合:

var people = [ 
{ 'myKey': 'A', 'status': 0, score: 1.5 },
{ 'myKey': 'C', 'status': 1, score: 2.0 },
{ 'myKey': 'D', 'status': 0, score: 0.2 },
{ 'myKey': 'E', 'status': 1, score: 1.0 },
{ 'myKey': 'F', 'status': 0, score: 0.4 },
{ 'myKey': 'G', 'status': 1, score: 3.0 },
];

'status':1そのようなすべてのアイテムを取得する方法

var people2= [ 
{ 'myKey': 'C', 'status': 1, score: 2.0 },
{ 'myKey': 'E', 'status': 1, score: 1.0 },
{ 'myKey': 'G', 'status': 1, score: 3.0 },
];

編集: 私の最終的な目的は'status':1、昇順で n=2 のアイテムを取得することです。

var people3= [ 
{ 'myKey': 'E', 'status': 1, score: 1.0 },
{ 'myKey': 'C', 'status': 1, score: 2.0 },
{ 'myKey': 'G', 'status': 1, score: 3.0 },
]; 

var people私のアプローチは、すべてのアイテムから取得する 1 つの関数'status':1(people2ここで求めているコードです)、people2スコアの昇順で並べ替える 1 つの fn ( people3)、次に最初のアイテム'myKey':の値を選択する 1 つの fn です。n=2だから私は得る

var people4 = [ 'E', 'C' ];
4

4 に答える 4

4
function getMyKeys(top) {    
   var result = people.filter(function (item) {
          return item["status"] === 1; //only status=1
       })
       .sort(function (a, b) {
          return a["score"] - b["score"]; //sort 
       })
       .slice(0, top) //top n
       .map(function (item) {
          return item["myKey"]; //return "myKey" property only, if needed.
       });
   }

フィドルのデモ

于 2013-04-22T08:51:41.747 に答える
1

ステータスでフィルタリングし、スコアで並べ替えてから、myKey のみをマップする必要があります。

var people = [ 
{ 'myKey': 'A', 'status': 0, score: 1.5 },
{ 'myKey': 'C', 'status': 1, score: 2.0 },
{ 'myKey': 'D', 'status': 0, score: 0.2 },
{ 'myKey': 'E', 'status': 1, score: 1.0 },
{ 'myKey': 'F', 'status': 0, score: 0.4 },
{ 'myKey': 'G', 'status': 1, score: 3.0 },
];

var result = people.filter(function(i) {
    return i.status == 1;
    })
    .sort(function (a, b) {
        if (a.score == b.score) return 0;
        if (a.score > b.score) return 1;
        return -1;
    }).map(function(i) {
        return i.myKey;
    });

http://jsfiddle.net/GrYuK/1/

于 2013-04-22T08:54:26.053 に答える
1

別の回答を我慢して、詳細を表示できるリンクを用意しました。

  (function getPeopleStatus (person){
    for(var ctr = 0; ctr< person.length; ctr++){

    if(person[ctr].status === 1){
        selection.push(person[ctr]);
    }

}
    selection.sort()
  })(people);
于 2013-04-22T09:01:34.830 に答える