计算数组内特定 id 的小时数
Counting hours inside an array for a specific id
我正在尝试动态计算个人 ID 的工作小时数。目前,如果我想计算 id 1 的小时数,例如我必须硬编码 id 值并进行计数。下面的例子。我正在使用数据表,所以最终会有数百行
var array = [{id: 1, hours: 10},{id: 1, hours: 12}, {id: 2, hours: 6}, {id: 2, hours: 11} {id : 3, 小时: 12}, {id: 3, 小时: 8}]
var array = dataTable.rows().data().toArray();
array.filter((h) => {
if (h.id == '1' && (count += h.hours) > 5) {
'do something'
}
else {'do something'}
})
如何在不对 id 值进行硬编码的情况下动态计算每个 'id' 的小时数谢谢
看起来你可以在这里使用 .map()
而不是 filter
我会将你的过滤器/映射包装到一个参数为 id
的函数中,这样你每次都可以传递 ID调用函数,无需对其进行硬编码。
var array = [{id: 1, hours: 10},{id: 1, hours: 12}, {id: 2, hours: 6}, {id: 2, hours: 11} {id: 3, hours: 12}, {id: 3, hours: 8}]
const countHours = (id) => {
array.map(item => {
if (item.id === id && item.hours > 5) {
return 'do something'
}
else { return 'do something'}
})
}
// call it like so...
countHours(1)
您可以创建一个函数来过滤数组并使用 reduce 对所有 'hours' 值求和。
var arr = [{id: 1, hours: 10},{id: 1, hours: 12}, {id: 2, hours: 6}, {id: 2, hours: 11}, {id: 3, hours: 12}, {id: 3, hours: 8}]
function sumIdHours(id){
var hourSum = arr.filter(x => x.id === id).reduce((a, b) => a + b.hours, 0)
return hoursSum
}
//e.g.
sumIdHours(1)
您可以将此逻辑包装到接收 id 参数的函数中:
function hoursById (id) {
let count = 0;
const array = dataTable.rows().data().toArray();
array.forEach((h) => {
if (h.id == id && (count += h.hours) > 5) {
'do something'
} else {
'do something'}
})
return count;
}
然后你可以调用函数
hoursById('1') // return count for id 1
hoursById('2') // return count for id 2
我正在尝试动态计算个人 ID 的工作小时数。目前,如果我想计算 id 1 的小时数,例如我必须硬编码 id 值并进行计数。下面的例子。我正在使用数据表,所以最终会有数百行
var array = [{id: 1, hours: 10},{id: 1, hours: 12}, {id: 2, hours: 6}, {id: 2, hours: 11} {id : 3, 小时: 12}, {id: 3, 小时: 8}]
var array = dataTable.rows().data().toArray();
array.filter((h) => {
if (h.id == '1' && (count += h.hours) > 5) {
'do something'
}
else {'do something'}
})
如何在不对 id 值进行硬编码的情况下动态计算每个 'id' 的小时数谢谢
看起来你可以在这里使用 .map()
而不是 filter
我会将你的过滤器/映射包装到一个参数为 id
的函数中,这样你每次都可以传递 ID调用函数,无需对其进行硬编码。
var array = [{id: 1, hours: 10},{id: 1, hours: 12}, {id: 2, hours: 6}, {id: 2, hours: 11} {id: 3, hours: 12}, {id: 3, hours: 8}]
const countHours = (id) => {
array.map(item => {
if (item.id === id && item.hours > 5) {
return 'do something'
}
else { return 'do something'}
})
}
// call it like so...
countHours(1)
您可以创建一个函数来过滤数组并使用 reduce 对所有 'hours' 值求和。
var arr = [{id: 1, hours: 10},{id: 1, hours: 12}, {id: 2, hours: 6}, {id: 2, hours: 11}, {id: 3, hours: 12}, {id: 3, hours: 8}]
function sumIdHours(id){
var hourSum = arr.filter(x => x.id === id).reduce((a, b) => a + b.hours, 0)
return hoursSum
}
//e.g.
sumIdHours(1)
您可以将此逻辑包装到接收 id 参数的函数中:
function hoursById (id) {
let count = 0;
const array = dataTable.rows().data().toArray();
array.forEach((h) => {
if (h.id == id && (count += h.hours) > 5) {
'do something'
} else {
'do something'}
})
return count;
}
然后你可以调用函数
hoursById('1') // return count for id 1
hoursById('2') // return count for id 2