2017-09-12 4 views
0

与えられたものを取って結果を出力する必要があります。結果オブジェクトを取得するためにanimalsオブジェクトをフィルタリングするにはどうすればよいですか?Given(JavaScript)からの結果を得るためにオブジェクトをフィルタリングする方法

は考える:

var animals = [ 
    { type: 'monkey', owner: 'Callie' }, 
    { type: 'rat', owner: 'Johnnie' }, 
    { type: 'rat', owner: 'Callie' }, 
    { type: 'monkey', owner: 'Megan' }, 
    { type: 'rat', owner: 'Megan' }, 
    { type: 'horse', owner: 'Megan' } 
]; 

結果:

[ 
    { type: 'rat', owner: [ 'Johnnie', 'Callie', 'Megan' ], count: 3 }, 
    { type: 'monkey', owner: [ 'Megan', 'Callie' ], count: 2 }, 
    { type: 'horse', owner: [ 'Megan' ], count: 1 } 
]; 

を私のコードは次のとおりです。

endorsements.map(function(endorsement){ 
    var hash = {}, users = [], count = 0, result = [], skills = endorsement.skill, skill; 

     for(var i = 0; i < skills.length; i++){ 
      skill = skills[i]; 
      if(!hash[skill]){ 
       result.push(skill); hash[skill] = true; count++; users.push(endorsement.user); 
      } 
     } 
    return {skill: skill, user: users, count: count}; 
}); 
+5

あなたがここで何かを自分で書こうとしましたか? – Dekel

+3

[Stack Overflowユーザーの研究努力の程度](https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users)を参照してください。 。これはコード作成サービスではありません。 ***あなたの問題を調査し、投稿する前に自分でコードを書くことができました***。具体的なことに固執している場合は、試したことの概要と[最小限の、完全で検証可能な例](https://stackoverflow.com/help/mcve)を含めて、問題の解決に役立ててください。 – FluffyKitten

+0

はい - 申し訳ありません、スタックオーバーフローに関する私の最初の投稿... –

答えて

0

あなたはanimals配列をreduceし、その結果のオブジェクトのvaluesを取ることができます。

var animals = [ 
 
    { type: 'monkey', owner: 'Callie' }, 
 
    { type: 'rat', owner: 'Johnnie' }, 
 
    { type: 'rat', owner: 'Callie' }, 
 
    { type: 'monkey', owner: 'Megan' }, 
 
    { type: 'rat', owner: 'Megan' }, 
 
    { type: 'horse', owner: 'Megan' } 
 
]; 
 

 
var res = Object.values(animals.reduce(function(all, item) { 
 
    if (!all.hasOwnProperty(item.type)) { 
 
    all[item.type] = {type: item.type, owner: [], count: 0} 
 
    } 
 
    all[item.type]['owner'].push(item.owner); 
 
    all[item.type]['count']++; 
 
    return all; 
 
}, {})); 
 
console.log(res);

0

私は別の結果フォーマットを提案するかもしれません。提案するフォーマットが本当に必要な場合は、私が中間ステップとして提案していることを得ることが簡単になると思います。

私はフォーマットを提案:

{ 
    rat: ['Johnnie', 'Callie', 'Megan'], 
    monkey: ['Megan', 'Callie'], 
    horse: ['Megan'] 
} 

このフォーマットを作成するには:

var animals = [ 
    { type: 'monkey', owner: 'Callie' }, 
    { type: 'rat', owner: 'Johnnie' }, 
    { type: 'rat', owner: 'Callie' }, 
    { type: 'monkey', owner: 'Megan' }, 
    { type: 'rat', owner: 'Megan' }, 
    { type: 'horse', owner: 'Megan' } 
]; 

var result = {}; 
for (var idx = 0; idx < animals.length; idx++) { 
    if (!result[animals[idx].type]) { 
    result[animals[idx].type] = []; 
    } 
    result[animals[idx].type].push(animals[idx].owner); 
} 

// get some info 
result['rat'].length; // 3 people own a rat 
result['monkey'].indexOf('Megan'); // 1 since Megan owns a monkey 
Object.keys(result); // ['rat', 'monkey', 'horse'] 
関連する問題