有没有办法从 Angular Material 数据源中获取随机前 10% 的结果
Is there a way to get Random Top 10% result from an Angular Material Data Source
对代码的粗略表示歉意。这是一项正在进行的工作。虽然我觉得这离工作很近了,但我似乎无法将其推过终点线。我只是想将 10% 的结果从 http post 请求推送到 material table。任何建议表示赞赏。
RandomSample() {
const headers = { 'content-type': 'application/json' };
var userId, roleId, eventTypeIds: any[];
if (this.selectedUser == undefined) {
userId = 0;
}
else {
userId = this.selectedUser.id;
}
if (this.selectedEventTypes == undefined) {
eventTypeIds = [-1];
}
else {
eventTypeIds = this.selectedEventTypes.map(selectedEventTypes => selectedEventTypes.id);
}
var SearchStart, SearchEnd
if (this.searchStartDate == undefined) {
var ssd = new Date();
ssd.setDate(ssd.getDate() - 14);
SearchStart = ssd;
}
else {
SearchStart = this.searchStartDate;
}
if (this.searchEndDate == undefined) {
SearchEnd = new Date();
}
else {
SearchEnd = this.searchEndDate;
}
var body = JSON.stringify({ UserId: userId, EventTypeIds: eventTypeIds, SearchStartDate: SearchStart, SearchEndDate: SearchEnd });
console.log(body);
this.http.post(environment.BASE_URL + 'useractivity/getloginsoverfourteendays', body, { 'headers': headers }).subscribe((selectedUser: any) => {
var random = Math.floor(Math.random() * selectedUser.length);
this.dataSource = new MatTableDataSource(selectedUser[random]);
console.log();
}, (error: any) => {
console.error(error);
})
}
我们可以根据 this.selectedUser.length
本身使用 slice(startIndex, endIndex)
到 select 范围内的 this.selectedUser[]
项目。这将 select 第一项的 20%。
selectedUser = Array.from(Array(100).keys()) // [1,2,3,...100]
function httpCall() {
const percent = 20;
const strartIndex = 0;
const endIndex = (percent * this.selectedUser.length / 100)
const dataSource = this.selectedUser.slice(strartIndex,Math.floor(endIndex))
console.log(dataSource)
}
this.httpCall()
到 select 基于 %
给定的相同数量的项目,但我们随机创建了一个辅助函数,该函数随机 selects 项目和 returns 所选项目数组(避免受骗)。
selectedUser = Array.from(Array(100).keys()) // [1,2,3,...100]
function httpCall() {
const percent = 20;
const dataSource = this.selectRandomItems(percent, this.selectedUser);
console.log(dataSource);
}
function selectRandomItems(percent, selectedUser) {
const totalCount = Math.floor((percent * this.selectedUser.length) / 100);
let returnArr = [];
while (returnArr.length < totalCount) {
let item = selectedUser[Math.floor(Math.random() * selectedUser.length)];
returnArr.push(item);
returnArr = [...new Set(returnArr)];
}
return returnArr;
}
this.httpCall()
对代码的粗略表示歉意。这是一项正在进行的工作。虽然我觉得这离工作很近了,但我似乎无法将其推过终点线。我只是想将 10% 的结果从 http post 请求推送到 material table。任何建议表示赞赏。
RandomSample() {
const headers = { 'content-type': 'application/json' };
var userId, roleId, eventTypeIds: any[];
if (this.selectedUser == undefined) {
userId = 0;
}
else {
userId = this.selectedUser.id;
}
if (this.selectedEventTypes == undefined) {
eventTypeIds = [-1];
}
else {
eventTypeIds = this.selectedEventTypes.map(selectedEventTypes => selectedEventTypes.id);
}
var SearchStart, SearchEnd
if (this.searchStartDate == undefined) {
var ssd = new Date();
ssd.setDate(ssd.getDate() - 14);
SearchStart = ssd;
}
else {
SearchStart = this.searchStartDate;
}
if (this.searchEndDate == undefined) {
SearchEnd = new Date();
}
else {
SearchEnd = this.searchEndDate;
}
var body = JSON.stringify({ UserId: userId, EventTypeIds: eventTypeIds, SearchStartDate: SearchStart, SearchEndDate: SearchEnd });
console.log(body);
this.http.post(environment.BASE_URL + 'useractivity/getloginsoverfourteendays', body, { 'headers': headers }).subscribe((selectedUser: any) => {
var random = Math.floor(Math.random() * selectedUser.length);
this.dataSource = new MatTableDataSource(selectedUser[random]);
console.log();
}, (error: any) => {
console.error(error);
})
}
我们可以根据 this.selectedUser.length
本身使用 slice(startIndex, endIndex)
到 select 范围内的 this.selectedUser[]
项目。这将 select 第一项的 20%。
selectedUser = Array.from(Array(100).keys()) // [1,2,3,...100]
function httpCall() {
const percent = 20;
const strartIndex = 0;
const endIndex = (percent * this.selectedUser.length / 100)
const dataSource = this.selectedUser.slice(strartIndex,Math.floor(endIndex))
console.log(dataSource)
}
this.httpCall()
到 select 基于 %
给定的相同数量的项目,但我们随机创建了一个辅助函数,该函数随机 selects 项目和 returns 所选项目数组(避免受骗)。
selectedUser = Array.from(Array(100).keys()) // [1,2,3,...100]
function httpCall() {
const percent = 20;
const dataSource = this.selectRandomItems(percent, this.selectedUser);
console.log(dataSource);
}
function selectRandomItems(percent, selectedUser) {
const totalCount = Math.floor((percent * this.selectedUser.length) / 100);
let returnArr = [];
while (returnArr.length < totalCount) {
let item = selectedUser[Math.floor(Math.random() * selectedUser.length)];
returnArr.push(item);
returnArr = [...new Set(returnArr)];
}
return returnArr;
}
this.httpCall()