2017-01-06 14 views
0

次は、クラスの説明のためにJSの重複コードを削除する良い例ですか? 誰かが私に、他の角度に触れるより優れたものと、これを改善する方法を教えてもらえますか?JavaScriptの重複コード

let employees = [{ 
    name: 'Paul', 
    type: 'Manager' 
    }, 
    { 
    name: 'Rich', 
    type: 'Developer' 
    }, 
    { 
    name: 'Rob', 
    type: 'Cleaner' 
    }, 
    { 
    name: 'Chris', 
    type: 'Developer' 
    }] 

var findManager = function(){ 
    employees.forEach(function(person){ 
    if (person.type == 'Manager') { 
     console.log(person.name); 
    } 
    }) 
} 
var findCleaner = function(){ 
    employees.forEach(function(person){ 
    if (person.type == 'Cleaner') { 
     console.log(person.name); 
    } 
    }) 
} 
var findDeveloper = function(){ 
    employees.forEach(function(person){ 
    if (person.type == 'Developer') { 
     console.log(person.name); 
    } 
    }) 
} 

// CODEリファクタリング

var findParticularEmployment = function(employment){ 
    employees.forEach(function(person){ 
    if (person.type == employment){ 
     console.log(person.name); 
    } 
    }) 
} 

var findDeveloper = function(){ 
    return findParticularEmployment('Developer') 
} 

var findManager = function(){ 
    return findParticularEmployment('Manager') 
} 

var findCleaner = function(){ 
    return findParticularEmployment('Cleaner') 
} 

findManager() 
findCleaner() 
findDeveloper() 
+5

これはおそらくより良い提案リファクタリングは結構です、この特定のユースケースについてhttp://codereview.stackexchange.com/ –

+0

@尋ねたです。 –

+0

従業員が見つかった後に実行する機能は、おそらくリファクタリングされるべきですが、私はその人を返すだけだ。 –

答えて

0

以下は、このお試しください:

var findEmployee = function(employeeType) { 
    employees.forEach(function(person){ 
    if (person.type == employeeType) { 
     console.log(person.name); 
    } 
    }) 
} 

findEmployee('Developer'); 
findEmployee('Cleaner'); 
findEmployee('Manager'); 
+0

ですが、タイプミスやケースの問題が発生しやすいため、列挙型のfindEmployee(Employee.Developer)がその問題を軽減します。 –

+0

どうすればそれが@AlexKとなるでしょうか? –

+0

'var Employee = {開発者:"開発者 "、クリーナー:"クリーナー "};' –

0

あなたは{type: [names]}で一つのオブジェクトを作成することができ、その後、あなたがキーとしてタイプを使用して名前の配列を取得することができます。

let employees = [{ 
 
    name: 'Paul', 
 
    type: 'Manager' 
 
}, { 
 
    name: 'Rich', 
 
    type: 'Developer' 
 
}, { 
 
    name: 'Rob', 
 
    type: 'Cleaner' 
 
}, { 
 
    name: 'Chris', 
 
    type: 'Developer' 
 
}] 
 

 
var obj = employees.reduce(function(r, e) { 
 
    r[e.type] = (r[e.type] || []).concat(e.name) 
 
    return r 
 
}, {}); 
 

 
console.log(obj.Manager) 
 
console.log(obj.Developer)