2017-08-13 84 views
1

任何人都有一個解決方案來將這些密鑰對值合計爲一個密鑰?我嘗試使用dict[id] += parseFloat(value)將它們添加到密鑰對值,但它導致操作不正確。我試過使用eval(valuestring),我很確定鍵內的值仍然是一個字符串。需要獲得排行榜每個ID的總和。Javascript,密鑰對值的總和

任何幫助,非常感謝。

dict_tips

'["U5WUV3A3G"]': '1000.0,200.0,300.0,100.0,500.0,420.0,42.0,98.0,500.0,150.0,300.0,300.0,25.0,200.0,', 
    '["U5FHMCWP7"]': '50.0,500.0,1000.0,45.0,1000.0,100.0,15.0,3.0,675.0,100.0,225.0,25.0,900.0,100.0,1000.0,10.0,30.0,0.001,0.005,1.755,1.724,1.5,', 
    '["U5SJQMME3"]': '100000.,100.0,100.0,100.0,50.0,100.0,100.0,40000.0,10.0,200.0,500.0,', 
    '["U6KAYAJ5Q"]': '100.0,200.0,900.0,100.0,100.0,100.0,1000.0,10.0,10.0,1000.0,100.0,100.0,1.0,10.0,800.0,200.0,100.0,190.0,190.0,10.0,10.0,', 
    '["U6F1AHQ8H"]': '10.0,100.0,', 
    '["U3H65TS9K"]': '500.0,100.0,200.0,500.0,35.414,12.345,', 
    '["U5HUZG3MF"]': '1.0,0.5,42.0,44.0,1.0,1.0,7.995,100.0,100.0,100.0,50.0,100.0,4.0,5.0,5.0,5.0,5.0,5.0,', 
    '["U5ZPTLXV5"]': '5.0,', 
    '["U6EMQC2LF"]': '737.998,2000.0,1000.0,300.0,666.0,6000.0,5000.0,5000.0,1000.0,5000.0,999.0,1.0,5000.0,3000.0,5000.0,9999.0,', 
    '["U62EVB2P7"]': '50.0,20.0,100.0,1.0,100.0,50.0,100.0,50.0,100.0,100.0,1.0,', 
    '["U3GJ9SREZ"]': '150.0,100.0,100.0,100.0,', 
    '["U6F0KBT2P"]': '1000.0,100.0,1000.0,100.0,800.0,100.0,100.0,', 
    '["U5WD17D5E"]': '150.0,75.0,', 
    '["U697Y6BL3"]': '5.0,1.0,51.0,2.0,1.0,1.0,5.0,', 
    '["U6GU038HX"]': '4000.0,', 
    '["U4B0NK2NR"]': '100.0,500.0,200.0,100.0,100.0,100.0,100.0,', 
    '["U6C23F8MT"]': '49.0,100.0,', 
    '["U5KQY01ST"]': '105.0,', 
    '["U6FSC0CC8"]': '100.0,100.0,', 
    '["U659939GF"]': '20.0,100.0,100.0,100.0,', 
    '["U5URNPRSA"]': '5.0,20.0,5.0,5.0,50.0,', 
    '["U5VAMV76F"]': '0.5,20.0,200.0,200.0,200.0,200.0,100.0,200.0,5.0,500.0,200.0,50.0,', 
    '["U5UL7KWKU"]': '150.0,200.0,', 
    '["U61NYHM25"]': '64.0,2.0,', 
    '["U6CMX965S"]': '10.0,10.0,20.0,50.0,30.0,', 
    '["U5G40R5PF"]': '499.0,', 
    '["U4XHS3DHA"]': '51.0,', 
    '["U69MY9WDS"]': '10.0,6.414,10.0,10.0,', 
    '["U666S65RC"]': '100.0,100.0,', 
    '["U5X3MEZ39"]': '1.0,1.0,10.01,10.1,0.002,0.01,1.1,' ] 

核心

var dict_tips = []; 
    var dict_counts = []; 
    var sum = [] 
    for (var i = 0; i < 200 ; i++)           { 
    var str = res.messages.matches[i].text; 
    var stdout = capcon.captureStdout(function scope() { 
    for (var x = 46 ; x < 55 ; x++) { 
    process.stdout.write(str[x]); 
            } 
                }); 
    var id = JSON.stringify(stdout.match(/.{1,9}/g)) 
    var stdout = capcon.captureStdout(function scope() { 
    for (var x = 76 ; x < 85 ; x++) { 
    process.stdout.write(str[x]); 
            }      }); 
    var extract = JSON.stringify(stdout.match(/.{1,9}/g)); 
    var parse = extract.indexOf(/.RDD|RD|R|D|:| /g) 
    var x = checkAndAdd(id,extract) 
    function checkAndAdd(id,extract) { 
     var found = dict_tips.some(function (el) { 
     return el.key === id; }) 
if (!found) { if (parse = -1) 
       { 
       var format = (""+extract.slice(2,9)).replace(/.RDD|RD|R|D|:| /g,''); 
       var x = format.substr(0, 9) + " " + format.substr(9); 
       var total = x.split(" ")    
       dict_tips.push({key: id}) 
       dict_tips[id] += total 
       } 
       else 
       { 
       var format = extract.slice(2,9) 
       var x = format.substr(0, 9) + " " + format.substr(9) 
       var total = x.split(" ") 
       dict_tips.push({key: id}) 
       dict_tips[id] = ""; 
       dict_tips[id] += total 
       } 
     } 
     else 
     { 
       var extract = stdout.match(/.{1,9}/g); 
       var parse = extract.indexOf(/.RDD|RD|R|D|:| /g) 
       if (parse = -1) 
       { 
       var format = ("" + extract).replace(/.RDD|RD|R|D|:| /g,''); 
       var x = format.substr(0, 9) + " " + format.substr(9); 
       var total = x.split(" ") 
       dict_tips[id] += total 
       } 
       else 
       { 
       var format = extract.slice(1,9) 
       var x = format.substr(0, 9) + " " + format.substr(9); 
       var total = x.split(" ") 
       dict_tips[id] += total 
       }; 

     } 

} 

} 
var sum = dict_tips.reduce(function(a, b) { return a + b; }, 0); 
console.log(JSON.stringify(sum)) 
console.log(dict_tips) 

回答

0

在PHP中的按鍵輸出,你會做的逗號的爆炸,認爲對JavaScript的分裂。在通過分割函數剛剛創建的數組的每個索引運行一個循環並添加到總和之後。你也需要對索引的每個值做一個parsefloat。

1

分割字符串,然後parseFloat和總結值:

const data = { 
 
    '["U5WUV3A3G"]': '1000.0,200.0,300.0,100.0,500.0,420.0,42.0,98.0,500.0,150.0,300.0,300.0,25.0,200.0,', 
 
    '["U5FHMCWP7"]': '50.0,500.0,1000.0,45.0,1000.0,100.0,15.0,3.0,675.0,100.0,225.0,25.0,900.0,100.0,1000.0,10.0,30.0,0.001,0.005,1.755,1.724,1.5,', 
 
    '["U5SJQMME3"]': '100000.,100.0,100.0,100.0,50.0,100.0,100.0,40000.0,10.0,200.0,500.0,', 
 
    '["U6KAYAJ5Q"]': '100.0,200.0,900.0,100.0,100.0,100.0,1000.0,10.0,10.0,1000.0,100.0,100.0,1.0,10.0,800.0,200.0,100.0,190.0,190.0,10.0,10.0,', 
 
    '["U6F1AHQ8H"]': '10.0,100.0,', 
 
    '["U3H65TS9K"]': '500.0,100.0,200.0,500.0,35.414,12.345,', 
 
    '["U5HUZG3MF"]': '1.0,0.5,42.0,44.0,1.0,1.0,7.995,100.0,100.0,100.0,50.0,100.0,4.0,5.0,5.0,5.0,5.0,5.0,', 
 
    '["U5ZPTLXV5"]': '5.0,', 
 
    '["U6EMQC2LF"]': '737.998,2000.0,1000.0,300.0,666.0,6000.0,5000.0,5000.0,1000.0,5000.0,999.0,1.0,5000.0,3000.0,5000.0,9999.0,', 
 
    '["U62EVB2P7"]': '50.0,20.0,100.0,1.0,100.0,50.0,100.0,50.0,100.0,100.0,1.0,', 
 
    '["U3GJ9SREZ"]': '150.0,100.0,100.0,100.0,', 
 
    '["U6F0KBT2P"]': '1000.0,100.0,1000.0,100.0,800.0,100.0,100.0,', 
 
    '["U5WD17D5E"]': '150.0,75.0,', 
 
    '["U697Y6BL3"]': '5.0,1.0,51.0,2.0,1.0,1.0,5.0,', 
 
    '["U6GU038HX"]': '4000.0,', 
 
    '["U4B0NK2NR"]': '100.0,500.0,200.0,100.0,100.0,100.0,100.0,', 
 
    '["U6C23F8MT"]': '49.0,100.0,', 
 
    '["U5KQY01ST"]': '105.0,', 
 
    '["U6FSC0CC8"]': '100.0,100.0,', 
 
    '["U659939GF"]': '20.0,100.0,100.0,100.0,', 
 
    '["U5URNPRSA"]': '5.0,20.0,5.0,5.0,50.0,', 
 
    '["U5VAMV76F"]': '0.5,20.0,200.0,200.0,200.0,200.0,100.0,200.0,5.0,500.0,200.0,50.0,', 
 
    '["U5UL7KWKU"]': '150.0,200.0,', 
 
    '["U61NYHM25"]': '64.0,2.0,', 
 
    '["U6CMX965S"]': '10.0,10.0,20.0,50.0,30.0,', 
 
    '["U5G40R5PF"]': '499.0,', 
 
    '["U4XHS3DHA"]': '51.0,', 
 
    '["U69MY9WDS"]': '10.0,6.414,10.0,10.0,', 
 
    '["U666S65RC"]': '100.0,100.0,', 
 
    '["U5X3MEZ39"]': '1.0,1.0,10.01,10.1,0.002,0.01,1.1,' 
 
} 
 

 
const sums = Object.keys(data).reduce((results, key) => { 
 
    results[key] = data[key].split(',') 
 
    .map(item => parseFloat(item)) 
 
    .filter(item => !isNaN(item)) 
 
    .reduce((res, item) => res + item, 0) 
 

 
    return results 
 
}, {}) 
 

 
console.log(sums)

+0

謝謝你,我,因爲他們在dict_tips首先分離我的密鑰對的值。排行榜正在運行,歡迎您的幫助,我很欣賞它。 –

0

您可以通過使用for in該數據的密鑰簡單迭代。 然後你需要把split這個字符串轉換成一個數組,並且使用reduce來總結這些值。

const data = { 
 
    '["U5WUV3A3G"]': '1000.0,200.0,300.0,100.0,500.0,420.0,42.0,98.0,500.0,150.0,300.0,300.0,25.0,200.0,', 
 
    '["U5FHMCWP7"]': '50.0,500.0,1000.0,45.0,1000.0,100.0,15.0,3.0,675.0,100.0,225.0,25.0,900.0,100.0,1000.0,10.0,30.0,0.001,0.005,1.755,1.724,1.5,', 
 
    '["U5SJQMME3"]': '100000.,100.0,100.0,100.0,50.0,100.0,100.0,40000.0,10.0,200.0,500.0,', 
 
    '["U6KAYAJ5Q"]': '100.0,200.0,900.0,100.0,100.0,100.0,1000.0,10.0,10.0,1000.0,100.0,100.0,1.0,10.0,800.0,200.0,100.0,190.0,190.0,10.0,10.0,', 
 
    '["U6F1AHQ8H"]': '10.0,100.0,', 
 
    '["U3H65TS9K"]': '500.0,100.0,200.0,500.0,35.414,12.345,', 
 
    '["U5HUZG3MF"]': '1.0,0.5,42.0,44.0,1.0,1.0,7.995,100.0,100.0,100.0,50.0,100.0,4.0,5.0,5.0,5.0,5.0,5.0,', 
 
    '["U5ZPTLXV5"]': '5.0,', 
 
    '["U6EMQC2LF"]': '737.998,2000.0,1000.0,300.0,666.0,6000.0,5000.0,5000.0,1000.0,5000.0,999.0,1.0,5000.0,3000.0,5000.0,9999.0,', 
 
    '["U62EVB2P7"]': '50.0,20.0,100.0,1.0,100.0,50.0,100.0,50.0,100.0,100.0,1.0,', 
 
    '["U3GJ9SREZ"]': '150.0,100.0,100.0,100.0,', 
 
    '["U6F0KBT2P"]': '1000.0,100.0,1000.0,100.0,800.0,100.0,100.0,', 
 
    '["U5WD17D5E"]': '150.0,75.0,', 
 
    '["U697Y6BL3"]': '5.0,1.0,51.0,2.0,1.0,1.0,5.0,', 
 
    '["U6GU038HX"]': '4000.0,', 
 
    '["U4B0NK2NR"]': '100.0,500.0,200.0,100.0,100.0,100.0,100.0,', 
 
    '["U6C23F8MT"]': '49.0,100.0,', 
 
    '["U5KQY01ST"]': '105.0,', 
 
    '["U6FSC0CC8"]': '100.0,100.0,', 
 
    '["U659939GF"]': '20.0,100.0,100.0,100.0,', 
 
    '["U5URNPRSA"]': '5.0,20.0,5.0,5.0,50.0,', 
 
    '["U5VAMV76F"]': '0.5,20.0,200.0,200.0,200.0,200.0,100.0,200.0,5.0,500.0,200.0,50.0,', 
 
    '["U5UL7KWKU"]': '150.0,200.0,', 
 
    '["U61NYHM25"]': '64.0,2.0,', 
 
    '["U6CMX965S"]': '10.0,10.0,20.0,50.0,30.0,', 
 
    '["U5G40R5PF"]': '499.0,', 
 
    '["U4XHS3DHA"]': '51.0,', 
 
    '["U69MY9WDS"]': '10.0,6.414,10.0,10.0,', 
 
    '["U666S65RC"]': '100.0,100.0,', 
 
    '["U5X3MEZ39"]': '1.0,1.0,10.01,10.1,0.002,0.01,1.1,' 
 
} 
 

 
let sum = {}; 
 

 
for (var key in data) { 
 
    let arr = data[key].split(','); 
 
    let total = arr.reduce((acc, curr) => { 
 
    if (parseInt(curr)) { 
 
     return acc + parseInt(curr); 
 
    } 
 
    return acc; 
 
    }, 0); 
 
    sum[key] = total; 
 
} 
 

 
console.log(sum)