2017-02-03 59 views
0

下面是我用於獲取聚合總數的代碼,用於特定的groupby條件。我最初是通過篩選條件獲得所有記錄,然後根據groupby列,我得到了按列分組的每個不同值的計數。javascript - 字符串和數值比較

allRecords.filter(
    function(r){ 
    return r[groupByCondition.column] == groupByCondition.value; 
    } 
).length; 

如果groupbyColumn有一個數字值,這個工作得很好。當逐列分組具有字符時,它沒有得到總計數。

任何幫助,將不勝感激。

+0

你能否提供兩個例子,一個是數值,一個是沒有的。我不確定明白你的意思。謝謝。 –

+0

內部過濾器函數'3'和3是不同的,你需要parseInt(val,10) –

+0

或'return r [groupByCondition.column] .toString()== groupByCondition.value.toString();'(它們可能不是整數) – Archer

回答

0

使用parseInt/parseFloat將字符串轉換爲數字

return parseInt(r[groupByCondition.column]) == parseInt(groupByCondition.value); 
+3

他使用'=='而不是'===',所以'3'== 3解析爲true。鑑於此,您的答案如何成爲解決問題的辦法? – mvermand

+0

@mvermand解決方案使用parseInt,所以現在都是整數 –

+1

@mvermand''3am「== 3 => false' – Justinas

0

問題是groupByCondition.columngroupByCondition.value期待的對象,如groupByCondition = {"column": "col1", "value": "abc"}但你是在一個不同的方式groupByCondition = {"col1": "abc"}

您可以更改groupByCondition對象,以適應您日後訪問方式:

allRecords = [{"col1": "abc", "col2": "xyz"}, {"col1": "cde", "col2": "zxy"}, {"col1": "1", "col2": "bit"}, {"col1": 1, "col2": "byte"}]; 
 

 
function filterRecords(condition) { 
 
    result = allRecords.filter(
 
    function(r){ 
 
     return r[condition.column] == condition.value; 
 
    } 
 
); 
 
               
 
    console.log('The result of filtering by '+JSON.stringify(condition)+' is'); 
 
    console.log(result); 
 
    return result; 
 
} 
 

 
result = filterRecords({"column": "col1", "value": "abc"}); 
 
result = filterRecords({"column": "col1", "value": "cde"}); 
 
result = filterRecords({"column": "col1", "value": "1"}); 
 
result = filterRecords({"column": "col1", "value": 1});

或者你可以改變你訪問它,以適應條件對象的方式:

allRecords = [{"col1": "abc", "col2": "xyz"}, {"col1": "cde", "col2": "zxy"}, {"col1": "1", "col2": "bit"}, {"col1": 1, "col2": "byte"}]; 
 

 
function filterRecords(condition) { 
 
    key = Object.keys(condition)[0]; 
 
    result = allRecords.filter(
 
    function(r){ 
 
     return r[key] == condition[key]; 
 
    } 
 
); 
 
               
 
    console.log('The result of filtering by '+JSON.stringify(condition)+' is'); 
 
    console.log(result); 
 
    return result; 
 
} 
 

 
result = filterRecords({"col1": "abc"}); 
 
result = filterRecords({"col1": "cde"}); 
 
result = filterRecords({"col1": 1}); 
 
result = filterRecords({"col1": "1"});

這兩個示例均假定您基於僅1列/屬性的值篩選記錄。如果您想根據多個條件對其進行過濾,則需要額外的工作。