2016-07-27 81 views
-2

我有一個JSON對象從AJAX請求返回給我。我知道如何合計一個數組/對象中屬於某個鍵的值的總和。但我怎麼能動態地做到這一點?這可能很簡單,我只是錯過了一點,我可以想象它涉及另一個數組。 我使用的示例是從每個國家/地區獲得總數,我從該示例中刪除了不相關的信息。如何獲取數組中唯一值的數量?

{ 
"message": [ 
     { 
     "login_country_name": "Great Britain" 
     }, 
     { 
     "login_country_name": "Great Britain" 
     }, 
     { 
     "login_country_name": "United States" 
     }, 
     { 
     "login_country_name": "Localhost" 
     }, 
     { 
     "login_country_name": "Netherlands" 
     } 
    ] 
} 

期待的結果是類似的東西:

("Great Britain": 2, "United States": 1, "Localhost": 1, "Netherlands": 1) 
+0

總的是什麼?發生次數? –

+0

你的問題不清楚。我從上下文中假設你試圖獲得唯一值的數量? –

+2

好像你也刪除了相關信息;) –

回答

3

你只需要遍歷數據,併爲每一個獨特的價值計數。

var d = { 
 
    "message": [{ 
 
    "login_country_name": "Great Britain" 
 
    }, { 
 
    "login_country_name": "Great Britain" 
 
    }, { 
 
    "login_country_name": "United States" 
 
    }, { 
 
    "login_country_name": "Localhost" 
 
    }, { 
 
    "login_country_name": "Netherlands" 
 
    }] 
 
} 
 
var r = {}; 
 

 
d.message.forEach(function(o){ 
 
    r[o.login_country_name] = (r[o.login_country_name] || 0) +1 
 
}); 
 

 
console.log(r)

+0

我喜歡這是多麼簡單,很好地完成! – LukeXF

4

迭代陣列之上並生成結果。你可以使用Array#reduce方法。

var data = { 
 
    "message": [{ 
 
    "login_country_name": "Great Britain" 
 
    }, { 
 
    "login_country_name": "Great Britain" 
 
    }, { 
 
    "login_country_name": "United States" 
 
    }, { 
 
    "login_country_name": "Localhost" 
 
    }, { 
 
    "login_country_name": "Netherlands" 
 
    }] 
 
}; 
 

 
var res = data.message.reduce(function(obj, v) { 
 
    // update country count , where `(obj[v.login_country_name] || 0)` helps to avoid undefined retrns `0` if undefined 
 
    obj[v.login_country_name] = (obj[v.login_country_name] || 0) + 1; 
 
    // return the updated object 
 
    return obj; 
 
    // set initial value as an object which stores the result 
 
}, {}) 
 

 
console.log(res);

2

你可以使用一個對象和國家的鑰匙。

var object = { "message": [{ "login_country_name": "Great Britain" }, { "login_country_name": "Great Britain" }, { "login_country_name": "United States" }, { "login_country_name": "Localhost" }, { "login_country_name": "Netherlands" }] }, 
 
    count = Object.create(null); 
 

 
object.message.forEach(function (a) { 
 
    count[a.login_country_name] = (count[a.login_country_name] || 0) + 1; 
 
}); 
 

 
console.log(count);

0
var obj = { 
    "message": [{ 
    "login_country_name": "Great Britain" 
    }, { 
    "login_country_name": "Great Britain" 
    }, { 
    "login_country_name": "United States" 
    }, { 
    "login_country_name": "Localhost" 
    }, { 
    "login_country_name": "Netherlands" 
    }] 
} 
var _getObj = obj.message; 
var grouped=[]; 
_getObj.forEach(function(item) { 
    if (!this[item["login_country_name"]]) { // if item dont exist then create a new 
    this[item["login_country_name"]] = { 

     name: item["login_country_name"], 
     qty: 0 
     }; 
     grouped.push(this[item["login_country_name"]]) 
    } 
    this[item["login_country_name"]].qty = this[item["login_country_name"]].qty + 1; 


}, Object.create(null)) // create an empty object 
console.log(grouped) 

JSFIDDLE

0

這是你需要什麼?

var message = [ 
 
    { 
 
    "login_country_name": "Great Britain" 
 
    }, 
 
    { 
 
    "login_country_name": "Great Britain" 
 
    }, 
 
    { 
 
    "login_country_name": "United States" 
 
    }, 
 
    { 
 
    "login_country_name": "Localhost" 
 
    }, 
 
    { 
 
    "login_country_name": "Netherlands" 
 
    }, 
 
    { 
 
    "login_country_name": "Great Britain" 
 
    } 
 
]; 
 

 
var newMessage = []; 
 
$.each(message, function(key, value) { 
 
    if (newMessage.length < 1) { 
 
    newMessage.push(value); 
 
    
 
    } else { 
 
    var dIndex = -1; 
 
    $.each(newMessage, function(idx, val) { 
 
     if (value.login_country_name === val.login_country_name) dIndex = idx; 
 
    }); 
 
    
 
    if (dIndex == -1) { 
 
     value.count = 1; 
 
     newMessage.push(value); 
 
    } else { 
 
     newMessage[dIndex].count = (newMessage[dIndex].count || 1) + 1; 
 
    }  
 
    } 
 
}); 
 

 
console.log(newMessage);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

相關問題