2017-11-07 23 views
-1
var obj = [ { 
     "Name": "USA" 
     "Score": 2 
    },{ 
     "Name": "UK" 
     "Score": 1 
    },{ 
     "Name": "USA" 
     "Score": 2 
    },{ 
     "Name": "UK" 
     "Score": 2 
    },{ 
     "Name": "AUS" 
     "Score": 1 
    },{ 
     "Name": "NZ" 
     "Score": 3 
    },{ 
     "Name": "NZ" 
     "Score": 2 
    }]; 

これは私がこのコードを使用してスコアの数が「2」になるようにしています。特定の値でjsonから属性カウントを取得する方法

var count = 0; 
for(var key in Obj) 
    if(Object.keys(Obj[key]).filter(function(sub){return Obj[key][sub] === "2";}).length) ++count; 

私のカウント値は4ですが、現在では3カ国のみで発生しています。私がその価値を得る方法はありますか?

つまり、スコアが「2」である国の数です。整合素子を取得し、使用する

+0

'obj.filter(X => x.Score === 2).length'? – haim770

+0

@ haim770働いていませんでした。私は3つを出力したい。 – David

+0

@Cerbrusはいしかし、私は削除を求めていません。私は「2」を持っているカウント数を求めてから、重複を取り除いた。 – David

答えて

2

これを正しく実行してください。

ES6:

使用

const obj = [{"Name": "USA","Score": 2},{"Name": "UK","Score": 1},{"Name": "USA","Score": 2},{"Name": "UK","Score": 2},{"Name": "AUS","Score": 1},{"Name": "NZ","Score": 3},{"Name": "NZ","Score": 2}]; 
 

 
const result = obj 
 
    .filter(o => o.Score === 2)    // Get the proper score 
 
    .map(o => o.Name)       // Get the resulting names 
 
    .filter((o,i,a) => i === a.lastIndexOf(o)) // Filter for unique names 
 
    .length; 
 
    
 
console.log(result);

方法:


ES5、後方互換性のために:

var obj = [{"Name": "USA","Score": 2},{"Name": "UK","Score": 1},{"Name": "USA","Score": 2},{"Name": "UK","Score": 2},{"Name": "AUS","Score": 1},{"Name": "NZ","Score": 3},{"Name": "NZ","Score": 2}]; 
 

 
var result = obj 
 
    .filter(function(o){ 
 
    return o.Score === 2; 
 
    }) 
 
    .map(function(o){ 
 
    return o.Name 
 
    }) 
 
    .filter(function(o,i,a){ 
 
    return i === a.lastIndexOf(o); 
 
    }) 
 
    .length; 
 
    
 
console.log(result);

-2

使用Array.prototype.filter()Array.length

DEMO

var myobj = [{ 
 
    "Name": "USA", 
 
    "Score": 2 
 
},{ 
 
    "Name": "UK", 
 
    "Score": 1 
 
},{ 
 
    "Name": "USA", 
 
    "Score": 2 
 
},{ 
 
    "Name": "UK", 
 
    "Score": 2 
 
},{ 
 
    "Name": "AUS", 
 
    "Score": 1 
 
},{ 
 
    "Name": "NZ", 
 
    "Score": 3 
 
},{ 
 
    "Name": "NZ", 
 
    "Score": 2 
 
}]; 
 

 
var result = myobj.filter(t => t.Score === 2); 
 
console.log(result.length);

EDIT

var myobj = [{ 
 
     "Name": "USA", 
 
     "Score": 2 
 
    },{ 
 
     "Name": "UK", 
 
     "Score": 1 
 
    },{ 
 
     "Name": "USA", 
 
     "Score": 2 
 
    },{ 
 
     "Name": "UK", 
 
     "Score": 2 
 
    },{ 
 
     "Name": "AUS", 
 
     "Score": 1 
 
    },{ 
 
     "Name": "NZ", 
 
     "Score": 3 
 
    },{ 
 
     "Name": "NZ", 
 
     "Score": 2 
 
    }]; 
 

 
var result = _.uniq(_.map(myobj, 'Score')).length 
 
    
 
console.log(result);
<script src='https://cdn.jsdelivr.net/lodash/4.17.2/lodash.min.js'></script>

+1

重複を削除しません。同じ結果が得られている – charlietfl

+0

これは私が得ている。私は国の数を知りたい。 – David

+0

更新された回答を確認してください – Sajeetharan

関連する問題