2016-07-06 8 views
0

jqueryを使用して、キー値ペアに上位3つのレコードのみを表示しようとしています。各商品のインデックスはどのようにして見つけることができますか?jquery dictionary display top 3 records

My trails fiddle

var _map = { 
    'severity-normal': 0, 
    'severity-minimal': 0, 
    'severity-moderate': 0, 
    'severity-severe': 0, 
    'severity-highly-severe': 0 
}; 

$.each(_map, function(key, value) { 
    //alert(index + ': ' + value); 

    $('body').append('Key: ' + key + ' Value: ' + value + '<br />') 

}); 
+0

を参照してください?あなたは、キーと値の両方をうまく取得しているようです。また、オブジェクトには配列のようなプロパティの順序はありません。 –

+0

私はトップ3のキー値のペアのみを表示しようとしていますが、すべてではありません。私は(var I = 0;私は Kurkula

+0

トップ3は、最高値を持つもののように?インデックスではなく、トップ3の各項目のキーを見つけようとしてはいけませんか? (彼らは結局インデックスを持っていません) –

答えて

1

使用すると、オブジェクトのプロパティの配列を返すObject.keysを使用する必要がありますが、そこにいることができます、その配列を持つ値をループ:ここ

var _mapIndexes = Object.keys(_map); 

for (var i=0; i<_mapIndexes.length; i++) { 

    // i = the index of the _map key 
    // _mapIndexes[i] = the index in the _map object 
    // _map[_mapIndexes[i]] = the object 

    if (i > 2) break; 
    $('body').append('Key: '+_mapIndexes[i]+' Value: '+_map[_mapIndexes[i]]+'<br />') 
    top3.push(_map[_mapIndexes[i]]) 
} 

更新されたものへのリンクですjsFiddle

値の順にオブジェクトをソートする必要がある場合。あなたは.sort()Object.keys()を使用することができます。

var _sortedMap = Object.keys(_map).sort(function(a,b){return _map[a]-_map[b]}) 

は、あなたが「インデックス」とはどういう意味ですか更新jsFiddle

1

[OK]を、私は...私はあなたが何を意味するかだと思います

O(NlogN)ソリューション、_MAPにおけるNの項目がある場合

var _map = { 
    'severity-normal': 0, 
    'severity-minimal': 0, 
    'severity-moderate': 0, 
    'severity-severe': 0, 
    'severity-highly-severe': 0 
}; 

var list = []; 

$.each(_map, function(key, value) { 
    list.push({key:key, value:value}); 
}); 

list.sort(function(a,b) { return b.value - a.value; }); 

for(var i=0; i<3 && i<list.length; i++) { 
    alert(i + ': ' + list[i].value); 
} 

O(K * N)溶液、gにしたい場合らトップK・アイテムとは、N個のアイテム

var _map = { 
    'severity-normal': 0, 
    'severity-minimal': 0, 
    'severity-moderate': 0, 
    'severity-severe': 0, 
    'severity-highly-severe': 0 
}; 

function getTopElements(map, k) { 
    var lastMaximum = Infinity, currentMaximum; 
    var outputList = []; 

    while(outputList.length < k) { 
     currentMaximum = -Infinity; 

     for(key in map) { 
      if(map[key] > currentMaximum && map[key] < lastMaximum) { 
       currentMaximum = map[key]; 
      } 
     } 

     for(key in map) { 
      if(map[key] == currentMaximum) { 
       outputList.push(map[key]); 
      } 
      if(outputList.length >= k) break; 
     } 

     lastMaximum = currentMaximum; 
    } 

    return outputList; 
} 

var list = getTopElements(map,3); 

for(var i=0; i<list.length; i++) { 
    alert(i + ': ' + list[i].value); 
} 
+0

ソートは無意味で、 '.append()'は有効な関数ではないので、 '.push()'が必要です。また、どのように役立ちますか? –

+0

@Spencer Wieczorekええ、私はappend()とタイプしていました。訂正してくれてありがとう。しかし、Chandanaは上位3のレコードを望んでいるため、降順でソートする必要があります。しかし、今私はそれについて考えて、これは最適な解決策ではありません...私はそれを修正させてください。 –

+0

すべての値は「0」なので、並べ替えは順序を変更しません。 OPは彼らがどのようにソートされる必要があるかについて決して述べなかった。 –