2015-04-07 49 views
0

我剛開始學習node.js。 我想創建一個腳本,它將從文件中獲取一個列表。該名單是建立這樣node.js中列表中的總和數字

Bob:110 
Mike:120 
Bob:334 
Dan:240 

,並給這個輸出

name value 

它應該總結具有相同的名稱相關聯的數字。

所以在我的例子,將打印

Bob 444 
Mike 120 
Dan 240 

我用我在這個網站上找到的幫助下創建一些基本的腳本

fs = require('fs'); 
var array = fs.readFileSync('C:\\data.txt').toString().split("\n"); 

var items = {}, base, key; 
for (var i = 0; i < array.length; i++) { 
    base = array[i]; 
    key = base[0]; 
    if (!items[key]) { 
     items[key] = 0; 
    } 
    items[key] += base[1]; 
} 

var outputArr = [], temp; 
for (key in items) { 
    temp = [key, items[key]] 
    outputArr.push(temp); 
} 
console.log(outputArr); 

注意,我從一個文本文件中獲取名單,但它目前包含我在這個問題中發佈的內容。 我得到的輸出非常亂,我不知道爲什麼。 這是我的輸出:

[ [ 'B', '0oo' ], 
    [ 'M', '0i' ], 
    [ 'D', '0a' ], 
    [ 'undefined', NaN ] ] 

誰能幫我明白爲什麼這不能正常工作,並告訴我如何解決它?

順便說一下,我不確定這是否是在node.js中完成此任務的正確思路。我很樂意獲得反饋!

非常感謝!

+0

@DLeh建議使用在原始問題中未標記或標記的框架或庫的解決方案被認爲是不好的禮節。 –

+0

@DavidL是的,我同意。然而,這個問題的最佳答案包括了一個vanilla js解決方案。我直接鏈接到重複的答案,但它轉換爲問題鏈接。 – DLeh

+0

@DLeh啊,夠公平的。如果回答的鏈接沒有被吞噬,那將會更加清晰。我同意你的近距離投票。 –

回答

1

嗯,你可以使用的功能,以滿足您的需求:

function PrintAllValuesInList(name,list){ 
    var values = []; 
    for (var i = 0 ; i < list.length ; i++){ 
     if (list[i].name == name) 
      values.push(list[i].value); 
    } 
    console.log("Name ",name, " Values ", values.join());  
    } 

而對於一個呼叫是:

var arr = [{ name: 'x', value: 'a'}, 
      { name: 'y', value: 'b'}, 
      { name: 'x', value: 'c'}, 
      { name: 'z', value: 'd'}]; 

PrintAllValuesInList('x',arr); 

將輸出:

Name x Values a,c 

這裏猛擊者:Plunker

謝謝,如果我可以幫忙。

+0

您可能想要將控制檯日誌移到功能:) –

+0

對不起,我在創建併發布它之前準備好了。 :) – netrevisanto