计数值在使用 REST 调用获取的数据中重复的次数
Count times a value is repeated in data fetched using REST call
我正在使用 REST 从 SharePoint 获取数据,一切正常,只是我想计算同一项目出现的次数。
这是jQuery:
var url = "https:xxxxxxxx/_vti_bin/ListData.svc/RMSD_Tasks?$orderby=TypeOfIssueValue asc,StatusValue desc&$filter=StatusValue ne 'Completed'&groupby=TypeOfIssueValue/StatusValue";
var lastIssue = '';
$.getJSON(url, function (data) {
$('#totalCounter').text(data.d.results.length);
for (var i = 0; i < data.d.results.length; i++) {
var dateReceived = data.d.results[i].DateReceived;
dateReceived = new Date(parseInt(dateReceived.replace("/Date(", "").replace(")/", ""), 10)).toLocaleString('en-US', {
year: 'numeric',
month: 'numeric',
day: '2-digit'
});
var issue = data.d.results[i].TypeOfIssueValue;
console.log(data.d.results[i].TypeOfIssueValue);
if (issue != lastIssue) {
lastIssue = issue;
$('#myDataList').append('<a href="#" class="list-group-item">' + issue + '<span class="badge">' + issue.length + '</span></a>');
}
}
});
我需要计算特定 TypeOfIssueValue 出现的次数。当我看到控制台时,它准确地显示了我想添加给我的信息:
我刚刚在徽章中添加了一个 issue.length,我想插入数字只是为了在那里放置一些东西,但我知道它不会显示我想要的东西。谢谢!
您可以先将 TypeOfIssueValue
值映射到一个新数组,然后根据 this answer.
计算每次出现的次数
代码为:
var a = data.d.results.map(function(issue) {
return issue.TypeOfIssueValue
});
result = {};
for (i = 0; i < a.length; ++i) {
if (!result[a[i]])
result[a[i]] = 0;
++result[a[i]];
}
result
将是一个对象,属性 是问题类型,值是每个问题的计数。
让我知道这是否有意义。
var data = {
d: {
results: [
{ TypeOfIssueValue: '456' },
{ TypeOfIssueValue: '123' },
{ TypeOfIssueValue: '789' },
{ TypeOfIssueValue: '123' }
]
}
};
var filteredItems = data.d.results.filter(function(item){
return item.TypeOfIssueValue == '123';
});
var count = filteredItems.length;
document.getElementById("output").innerHTML = "Number of items with value '123': " + count;
<div id="output"/>
谢谢@srinivas。我接受了你的回复,虽然我做了一些修改,以防它们对其他人有用。
我在 span 徽章中添加了一个 class 并添加了一个新数组来推送问题:
issuesArray.push(data.d.results[i].TypeOfIssueValue);
$('#myDataList').append('<a href="#" class="list-group-item dataLI">' + issue + '<span class="badge badgeSpan"></span></a>');
然后我在 getJSON:
之后添加了一个 done() 到 运行
.done(
function(){ var resultado = foo(issuesArray)[1];
console.log(resultado);
var badges = $('.badgeSpan');
for (var j = 0; j < resultado.length; j++){
badges[j].innerHTML = resultado[j];
}
});
最后我对您提供的函数 foo() 做了一个小修改:
testArray = [];
function foo(arr) {
var a = [], b = [], prev;
for ( var i = 0; i < arr.length; i++ ) {
if ( arr[i] !== prev ) {
a.push(arr[i]);
b.push(1);
} else {
b[b.length-1]++;
}
prev = arr[i];
}
testArray.push(a,b)
return testArray;
}
这可能是一个非常不正统的解决方案,但它对我有用。再次感谢。
我正在使用 REST 从 SharePoint 获取数据,一切正常,只是我想计算同一项目出现的次数。
这是jQuery:
var url = "https:xxxxxxxx/_vti_bin/ListData.svc/RMSD_Tasks?$orderby=TypeOfIssueValue asc,StatusValue desc&$filter=StatusValue ne 'Completed'&groupby=TypeOfIssueValue/StatusValue";
var lastIssue = '';
$.getJSON(url, function (data) {
$('#totalCounter').text(data.d.results.length);
for (var i = 0; i < data.d.results.length; i++) {
var dateReceived = data.d.results[i].DateReceived;
dateReceived = new Date(parseInt(dateReceived.replace("/Date(", "").replace(")/", ""), 10)).toLocaleString('en-US', {
year: 'numeric',
month: 'numeric',
day: '2-digit'
});
var issue = data.d.results[i].TypeOfIssueValue;
console.log(data.d.results[i].TypeOfIssueValue);
if (issue != lastIssue) {
lastIssue = issue;
$('#myDataList').append('<a href="#" class="list-group-item">' + issue + '<span class="badge">' + issue.length + '</span></a>');
}
}
});
我需要计算特定 TypeOfIssueValue 出现的次数。当我看到控制台时,它准确地显示了我想添加给我的信息:
我刚刚在徽章中添加了一个 issue.length,我想插入数字只是为了在那里放置一些东西,但我知道它不会显示我想要的东西。谢谢!
您可以先将 TypeOfIssueValue
值映射到一个新数组,然后根据 this answer.
代码为:
var a = data.d.results.map(function(issue) {
return issue.TypeOfIssueValue
});
result = {};
for (i = 0; i < a.length; ++i) {
if (!result[a[i]])
result[a[i]] = 0;
++result[a[i]];
}
result
将是一个对象,属性 是问题类型,值是每个问题的计数。
让我知道这是否有意义。
var data = {
d: {
results: [
{ TypeOfIssueValue: '456' },
{ TypeOfIssueValue: '123' },
{ TypeOfIssueValue: '789' },
{ TypeOfIssueValue: '123' }
]
}
};
var filteredItems = data.d.results.filter(function(item){
return item.TypeOfIssueValue == '123';
});
var count = filteredItems.length;
document.getElementById("output").innerHTML = "Number of items with value '123': " + count;
<div id="output"/>
谢谢@srinivas。我接受了你的回复,虽然我做了一些修改,以防它们对其他人有用。
我在 span 徽章中添加了一个 class 并添加了一个新数组来推送问题:
issuesArray.push(data.d.results[i].TypeOfIssueValue);
$('#myDataList').append('<a href="#" class="list-group-item dataLI">' + issue + '<span class="badge badgeSpan"></span></a>');
然后我在 getJSON:
之后添加了一个 done() 到 运行.done(
function(){ var resultado = foo(issuesArray)[1];
console.log(resultado);
var badges = $('.badgeSpan');
for (var j = 0; j < resultado.length; j++){
badges[j].innerHTML = resultado[j];
}
});
最后我对您提供的函数 foo() 做了一个小修改:
testArray = [];
function foo(arr) {
var a = [], b = [], prev;
for ( var i = 0; i < arr.length; i++ ) {
if ( arr[i] !== prev ) {
a.push(arr[i]);
b.push(1);
} else {
b[b.length-1]++;
}
prev = arr[i];
}
testArray.push(a,b)
return testArray;
}
这可能是一个非常不正统的解决方案,但它对我有用。再次感谢。