我有一个从AJAX请求返回给我的JSON对象。我知道如何将属于数组/对象中的键的值的总和相加。但我怎么能动态地做到这一点?它可能非常简单,我只是忽略了这一点,我可以想象它涉及另一个阵列。 我使用的示例是从每个国家/地区获取总数,我已从示例中删除了无关信息。
{
"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 :(得分: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);
答案 1 :(得分: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)
答案 2 :(得分: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);
答案 3 :(得分: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)
答案 4 :(得分: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>