计数特定项目的实例 w/Javascript
Count instances of specific item w/Javascript
我正在使用 SPServices 从共享点中提取列表。数据加载正常,但我正在尝试计算使用特定 word/option 的实例数。
数据是这样的:
"Name" : "George" , "Payment" : "CC"
"Name" : "Phillip", "Payment" : "CC"
"Name" : "Frances", "Payment" : "PO"
"Name" : "George", "Payment" : "PO"
"Name" : "George", "Payment" : "CC"
我想做的是计算 George 出现 CC 与 PO 的实例数。
我已经尝试了一些东西,唯一有点用的东西 - 虽然它只显示'1'是:
for ( var i = 0; i< entries; i++) {
if (Name == "George") {
if (Payment == "PO") {
++POs;
}
if (Payment == "CC") {
++VCCs;
}
}
}
但是 returns:
乔治 1
乔治 1
乔治 1
编辑:
这里的每个请求是显示:
$('myTable").append(
"<tr>" + "<td>" + Name + "</td>" +
"<td>" + Pos + "</td>" +
"<td>" + CCs + "</td>" +
"</tr>"
)
您可能需要描述您的数据实际是如何传递和存储在对象中的。您用来存储数据的方法可能是问题的根源。另外我建议你用你实际使用的代码更新你的问题。
以下是对您可能有用的猜测:
var data = [{"Name" : "George", "Payment" : "CC"},
{"Name" : "Phillip", "Payment" : "CC"},
{"Name" : "Frances", "Payment" : "PO"},
{"Name" : "George", "Payment" : "PO"},
{"Name" : "George", "Payment" : "CC"}];
function countPaymentTypes(data) {
var userData = {};
for (var i = 0; i < data.length; i+=1) {
// get name
var currentName = data[i].Name;
// create user object if one does not exist yet
if(userData[currentName]==undefined) {
userData[currentName] = { POs: 0, CCs: 0 };
}
// add payment type to count variables
if (data[i].Payment === "PO") {
userData[currentName].POs+=1;
}
else if (data[i].Payment === "CC") {
userData[currentName].CCs+=1;
}
}
return userData;
}
var userPaymentCounts = countPaymentTypes(data);
console.log(userPaymentCounts.George.POs); // 1
console.log(userPaymentCounts.George.CCs); // 2
console.log(userPaymentCounts.Frances.POs); // 1
console.log(userPaymentCounts.Frances.CCs); // 0
然后根据用户计数,您可以执行以下操作:
for (var userName in userPaymentCounts) {
$('myTable').append(
"<tr>" + "<td>" + userName + "</td>" +
"<td>" + userPaymentCounts[userName].POs + "</td>" +
"<td>" + userPaymentCounts[userName].CCs + "</td>" +
"</tr>"
);
}
我正在使用 SPServices 从共享点中提取列表。数据加载正常,但我正在尝试计算使用特定 word/option 的实例数。 数据是这样的:
"Name" : "George" , "Payment" : "CC"
"Name" : "Phillip", "Payment" : "CC"
"Name" : "Frances", "Payment" : "PO"
"Name" : "George", "Payment" : "PO"
"Name" : "George", "Payment" : "CC"
我想做的是计算 George 出现 CC 与 PO 的实例数。 我已经尝试了一些东西,唯一有点用的东西 - 虽然它只显示'1'是:
for ( var i = 0; i< entries; i++) {
if (Name == "George") {
if (Payment == "PO") {
++POs;
}
if (Payment == "CC") {
++VCCs;
}
}
}
但是 returns: 乔治 1 乔治 1 乔治 1
编辑: 这里的每个请求是显示:
$('myTable").append(
"<tr>" + "<td>" + Name + "</td>" +
"<td>" + Pos + "</td>" +
"<td>" + CCs + "</td>" +
"</tr>"
)
您可能需要描述您的数据实际是如何传递和存储在对象中的。您用来存储数据的方法可能是问题的根源。另外我建议你用你实际使用的代码更新你的问题。
以下是对您可能有用的猜测:
var data = [{"Name" : "George", "Payment" : "CC"},
{"Name" : "Phillip", "Payment" : "CC"},
{"Name" : "Frances", "Payment" : "PO"},
{"Name" : "George", "Payment" : "PO"},
{"Name" : "George", "Payment" : "CC"}];
function countPaymentTypes(data) {
var userData = {};
for (var i = 0; i < data.length; i+=1) {
// get name
var currentName = data[i].Name;
// create user object if one does not exist yet
if(userData[currentName]==undefined) {
userData[currentName] = { POs: 0, CCs: 0 };
}
// add payment type to count variables
if (data[i].Payment === "PO") {
userData[currentName].POs+=1;
}
else if (data[i].Payment === "CC") {
userData[currentName].CCs+=1;
}
}
return userData;
}
var userPaymentCounts = countPaymentTypes(data);
console.log(userPaymentCounts.George.POs); // 1
console.log(userPaymentCounts.George.CCs); // 2
console.log(userPaymentCounts.Frances.POs); // 1
console.log(userPaymentCounts.Frances.CCs); // 0
然后根据用户计数,您可以执行以下操作:
for (var userName in userPaymentCounts) {
$('myTable').append(
"<tr>" + "<td>" + userName + "</td>" +
"<td>" + userPaymentCounts[userName].POs + "</td>" +
"<td>" + userPaymentCounts[userName].CCs + "</td>" +
"</tr>"
);
}