计算数组内特定 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