2016-05-07 8 views
0

カウントプロパティの中で最も高い数値を特定することができましたが、その数値に関連付けられたオブジェクトをログに記録したい、つまり最もカウント数の多いオブジェクトを記録します。これはどうすればいいですか?JavaScript - ユニークなプロパティを持つオブジェクトを特定する

var objects = { 

    object1: {username: 'mark', count: 3}, 
    object2: {username: 'dave', count: 5}, 
    object3: {username: 'lucy', count: 2}, 
}; 

var maxBap = Math.max.apply(Math,objects.map(function(o){return o.count;})); 
console.log(maxBap); 

おかげ

+0

でオブジェクトを見つけることができますか?オブジェクトは 'map'関数を提供しません。 – rcsole

+0

申し訳はいそれがVARオブジェクト ' – mellows

+0

オブジェクトの配列であると考えられる= [ \t物体1 = {ユーザー名: 'マーク' は、回数:3}、 \tオブジェクト2 = {ユーザー名: 'デイブ'、カウント:5} 、 \t object3 = {username: 'lucy'、count:2}、 ]; ' – mellows

答えて

2

代わりの.map()、所望の目標を取得するために.reduce()を使用しています。

ここで結果オブジェクトのキーを返します。あなたが望むならば、オブジェクトを直接返すことができます。

var objects = { 
 
    object1: {username: 'mark', count: 3}, 
 
    object2: {username: 'dave', count: 5}, 
 
    object3: {username: 'lucy', count: 2}, 
 
}; 
 

 
var res = Object.keys(objects).reduce(function(resKey, key) { 
 
    return objects[resKey].count > objects[key].count ? resKey : key 
 
}) 
 

 
document.querySelector("pre").textContent = res + ": " + 
 
    JSON.stringify(objects[res], null, 4);
<pre></pre>


objectsが配列であることを意味していた場合、あなたはまだちょうどObject.keys()せず、.reduce()を使用することができます。これはオブジェクトを直接返します。これは最初の解決策で言及されたものです。

var objects = [ 
 
    {username: 'mark', count: 3}, 
 
    {username: 'dave', count: 5}, 
 
    {username: 'lucy', count: 2}, 
 
]; 
 

 
var res = objects.reduce(function(resObj, obj) { 
 
    return resObj.count > obj.count ? resObj : obj 
 
}) 
 

 
document.querySelector("pre").textContent = 
 
    JSON.stringify(res, null, 4);
<pre></pre>

+0

華麗なありがとう。もう一つは、最高のカウントのユーザ名をログに記録するだけです。つまり、 'dave'をログに記録します。 – mellows

+0

@mellows:典型的なプロパティアクセス '.username'を使用します。ですから、最初の解決策は 'objects [res] .username'と2番目の' res.username'です。 –

1

あなたは.reduceの代わり.mapを使用することができます。 `objects`は実際には配列は

const objects = [ 
    { username: 'mark', count: 3 }, 
    { username: 'dave', count: 5 }, 
    { username: 'lucy', count: 2 }, 
] 

const max = objects.reduce((acc, obj) => (
    obj.count > acc.count ? obj : acc 
)) 

console.log(max) 
1

あなたが最初のカウントのmaxを発見し、その数

var objects = { 
 
    object1: {username: 'mark', count: 3}, 
 
    object2: {username: 'dave', count: 5}, 
 
    object3: {username: 'lucy', count: 2}, 
 
}, result = null; 
 

 
var max = Math.max.apply(null, Object.keys(objects).map(e => {return objects[e].count})); 
 

 
for (var obj in objects) { 
 
    if (objects[obj].count == max) result = objects[obj]; 
 
} 
 

 
console.log(result)

関連する問題