2017-09-26 59 views
-2

所以我建立一個選舉腳本候選人分配給該黨的選民和分配,然後他們自己的選票,但我這麼炒,所以如果有人能幫助我理解我在做什麼,比如該功能在這裏:(非常)新手JavaScript程序員需要幫助理解實用功能

 class Electorate { 
constructor (newNames) { 
this.name = newNames 
this.allMyElectorates = [] 
this.addWinner = [] 
this.addPartyVotes = [] 
    } 
    addElectorate (...newNames) { 
     for(let i=0;i<newNames.length;i++){ 
      var newElectorate = new Electorate(newNames[i], this.addWinner, 
      this.addPartyVotes) 
      this.allMyElectorates.push(newElectorate) 
      return newElectorate 
    } 
} 
    addWinner(...newNames){ 
     theParty = myElection.findParty (partyName) 
      if (theParty == undefined){ 
       myElection.addIndependant (cadidateName) 
      }else{ 
       theCandidate = theParty.findCandidate (candidateName) 
      }if (theCandidate == undefined) { 
       theParty.addElectorateMP (candidateName, this) 
      }else{ 
       theCandidate.setElectorate (this)} 
     } 
    function totalVotes(...newNumbers){ 
     for(let i=0;i<newNumbers.length;i++){ 
      var newTotalVotes = new totalVotes(newNumbers[i], this) 
      this.addPartyVotes.push(newTotalVotes) 
      return newTotalVotes 
     } 
    } 
    function addWinner(...newNames){ 
     for(let i=0;i<newNumbers.length;i++){ 
      var addWinner = new Winner(newNames[i], this) 
      this.addWinner.push(newWinner) 
      return addWinner 
     } 
    } 


} 

這就是我想要的那一刻引用:

anElectorate = theElection.addElectorate('Auckland Central') 
anElectorate.addWinner('KAYE, Nicola Laura', 'National Party') 
anElectorate.addPartyVotes(329, 85, 10, 486, 3, 2, 6242, 553, 6101, 158, 
          12652, 1459, 7, 17, 53, 99) 

我想用從addPartyVotes收集的數據來創建新的功能(totalVotes)(在控制器類中)必須從中調用其他類,它有它的變量,我推出它在一個數組然後返回它,所以我做錯了什麼?

我試過在我的班級和導師中問過人,但我覺得他們只是在沒有給我任何真正的指導的情況下讓我離開,我是一名工程師而不是程序員,所以這很難繞過我的頭。

+1

我沒有看到'i'爲'newNumbers [i]定義'請包括所有相關的源代碼。 – NewToJS

+0

如果你是一名工程師,那麼編程就不難了。用任何語言編程都是運用邏輯來解決問題。作爲工程師,你必須遇到應用數學編程有類似的特點。所以,不要害怕多讀一些關於'JavaScript'的知識,並多想一想。編程有95%的想法和5%的編碼。此外,如果您在代碼中使用註釋更多地描述代碼,那麼這將對您有所幫助。 – Sand

+0

當我說「工程師」我的意思是我擅長搭建東西和數學很可能會成爲俄羅斯的給我,但你的權利我只需要找到我學習像學校要我去學習的正確方法。 – user8572175

回答

0

沒有單一的線或這是打破你的程序代碼點。 有無數的錯誤,並且根本不起作用。

看看這個例子(JS ES5):

var Electorate = { 
 
    candidates: [], 
 
    init: function() { 
 
    this.candidates = []; 
 
    return this; 
 
    }, 
 
    getCandidateByName: function(name) { 
 
    var filter_candidate_by_name = this.candidates.filter(function(d) { 
 
     return d.name === name; 
 
    })[0]; 
 
    var index_of_candidate = this.candidates.indexOf(filter_candidate_by_name); 
 
    return this.candidates[index_of_candidate]; 
 
    }, 
 
    calculateWinner: function() { 
 
    var max_votes = Math.max.apply(Math, this.candidates.map(function(d) { 
 
     return d.votes.length; 
 
    })); 
 
    if (!max_votes || isNaN(max_votes)) return false; 
 
    var records_with_max_votes = this.candidates.filter(function(d) { 
 
     return d.votes.length === max_votes; 
 
    }); 
 
    var result = {}; 
 
    if (records_with_max_votes.length > 1) { 
 
     result.result = 'Tied'; 
 
     result.candidates = records_with_max_votes; 
 
     var list_of_candidate_names = records_with_max_votes.map(function(d) { 
 
     return d.name; 
 
     }).join(', '); 
 
     result.explaination = 'Tied between ' + list_of_candidate_names + ', with a count of ' + max_votes + ' votes each'; 
 
    } else if (records_with_max_votes.length === 1) { 
 
     result.result = 'Won'; 
 
     result.candidate = records_with_max_votes[0]; 
 
     result.explaination = records_with_max_votes[0].name + ' won with a count of ' + max_votes + ' votes'; 
 
    } 
 
    return result; 
 
    } 
 
}; 
 

 
var Voter = { 
 
    name: null, 
 
    age: null, 
 
    gender: null, 
 
    init: function(name, age, gender) { 
 
    if (!name || !age || !gender) return false; 
 
    this.name = name; 
 
    this.age = age; 
 
    this.gender = gender; 
 
    return this; 
 
    } 
 
}; 
 

 
var Candidate = { 
 
    name: null, 
 
    votes: [], 
 
    init: function(name) { 
 
    this.name = name; 
 
    this.votes = []; 
 
    return this; 
 
    }, 
 
    castVote: function(voter) { 
 
    this.votes.push(voter); 
 
    return this; 
 
    } 
 
}; 
 

 

 
var electorate = Object.create(Electorate).init(); 
 

 
electorate.candidates.push(
 
    Object.create(Candidate).init('Mr. John Smith'), 
 
    Object.create(Candidate).init('Mr. Adam John'), 
 
    Object.create(Candidate).init('Ms. Christina Brown') 
 
); 
 

 
electorate 
 
    .getCandidateByName('Mr. John Smith') 
 
    .castVote(Object.create(Voter).init('Maria Smith', 38, 'Female')) 
 
    .castVote(Object.create(Voter).init('John Doe', 118, 'Male')) 
 
    .castVote(Object.create(Voter).init('John Doe', 44, 'Male')); 
 

 
electorate 
 
    .getCandidateByName('Ms. Christina Brown') 
 
    .castVote(Object.create(Voter).init('John Doe', 235, 'Male')) 
 
    .castVote(Object.create(Voter).init('John Doe', 34, 'Male')) 
 
    .castVote(Object.create(Voter).init('John Doe', 22, 'Male')); 
 

 

 
console.log(electorate.calculateWinner());

你可以看到,它收集信息,並考慮到候選人和選民可以創建並添加到適當的數據位置在選民中。

然後,它可以繼續所有票都投後,並宣佈選定獲獎者或獲獎者並列。


我的建議是刷新你的Javascript知識,並嘗試不使用ES6添加。

這是一個很好的資源,以JavaScript的刷(用於各種經驗水平):https://github.com/getify/You-Dont-Know-JS

+0

感謝您的回覆,我做了代碼學院網站,並認爲我有一個合理的理解,但然後我們得到了這個任務,它是完全不同的,佈局和幾乎所有的東西,我的頭腦完全吹。所以我要通過我的直覺/谷歌/剪切/粘貼,雖然谷歌沒有太大的幫助,因爲我無法找到我的導師給我們的格式的東西。我只是非常困惑和嚇壞了一下。 – user8572175

+0

很高興我能幫到你。 – IzzyCooper

0

功能才能this作爲參數。

有效的函數應該是這樣的:

function totalVotes (vote) { 
    return "something"; 
} 

如果你可以分享你的整個腳本關於表決/選舉程序,我可以幫助引導你和你的方法編寫有效的代碼。

+0

歡呼聲,我可以在整個「選舉」類中進行編輯,我現在正在嘗試這個類,但是有幾個類文件,所以我不知道如何去添加它。 – user8572175

+0

你能複製/粘貼這些文件的內容嗎?而且,這整個功能不會像你可能感覺到的那樣工作。 – IzzyCooper