我有一些代码在其中遍历表中的某些记录,同时我将这些数据组织到一个JavaScript对象数组中。
例如下面的数据。
我需要确保如果已经记录了一条“名称”记录,那么与其创建一个新项目,不使用现有项目,这样最终结果将是这样的对象或数组:
{
"bobjones": {
"sessions": 7
},
"annfrank": {
"sessions": 4
},
"fredsmith": {
"sessions": 4
}
}
在PHP中执行此操作很容易,但是由于解释键的方式,我在JS中为此感到困惑。有人可以提供一些指导吗?
答案 0 :(得分:2)
const inputData = [
{ name: 'Bob Jones', date: '----', session: 1 },
{ name: 'Ann Frank', date: '----', session: 1 },
{ name: 'Bob Jones', date: '----', session: 1 },
{ name: 'Fred Smith', date: '----', session: 1 },
]
var outputData = {}
for(let doc of inputData) {
if(outputData[doc.name]) {
outputData[doc.name].session = outputData[doc.name].session + doc.session
} else {
outputData[doc.name] = doc
}
}
console.log(outputData)
现在outputData是:
{ 'Bob Jones': { name: 'Bob Jones', date: '----', session: 2 },
'Ann Frank': { name: 'Ann Frank', date: '----', session: 1 },
'Fred Smith': { name: 'Fred Smith', date: '----', session: 1 } }
答案 1 :(得分:0)
您可以测试对象属性是否存在。如果是这样,请添加到其sessions
属性,否则请进行设置。
if(obj[prop]) {
obj[prop].sessions += sessions;
} else {
obj[prop] = { sessions };
}
在第一个if语句中,如果您担心obj[prop]
可能存在而obj[prop].sessions
可能不存在,则可以将其更改为if(obj[prop] && obj[prop].sessions) { ... }
答案 2 :(得分:0)
您可以使用reduce方法,假设您输入的数据是一个对象数组(因为这通常是查询数据库时获取数据的方式)。
df %>%
group_by(Year, Season) %>%
slice(which(Month == 2 | Month == 4 | Month == 8 | Month == 10))
#slice(which.max(value)) #selects row with largest value in each group