Javascript 向对象数组添加数据时,如何防止重复键?
我有一些代码,在其中我循环遍历表中的一些记录,同时我将这些数据组织到一个JavaScript对象数组中 例如下面的数据 我需要确保,如果记录“Name”已被记录,那么它将使用现有项而不是创建新项,以便最终结果将是如下所示的对象或数组:Javascript 向对象数组添加数据时,如何防止重复键?,javascript,Javascript,我有一些代码,在其中我循环遍历表中的一些记录,同时我将这些数据组织到一个JavaScript对象数组中 例如下面的数据 我需要确保,如果记录“Name”已被记录,那么它将使用现有项而不是创建新项,以便最终结果将是如下所示的对象或数组: { "bobjones": { "sessions": 7 }, "annfrank": { "sessions": 4 }, "fredsmith": { "sess
{
"bobjones": {
"sessions": 7
},
"annfrank": {
"sessions": 4
},
"fredsmith": {
"sessions": 4
}
}
在PHP中这样做很容易,但在JS中,由于键的解释方式,我很难做到这一点。有人能提供一些方向吗
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)
现在输出数据为:
{ 'Bob Jones': { name: 'Bob Jones', date: '----', session: 2 },
'Ann Frank': { name: 'Ann Frank', date: '----', session: 1 },
'Fred Smith': { name: 'Fred Smith', date: '----', session: 1 } }
您只需测试对象属性是否存在。如果是,则添加到其
会话
属性,如果不是,则设置它
if(obj[prop]) {
obj[prop].sessions += sessions;
} else {
obj[prop] = { sessions };
}
在第一个if语句中,如果您担心obj[prop]
可能存在,但是obj[prop].sessions
可能不存在,则可以将其更改为if(obj[prop]&&obj[prop].sessions){…}
,假设您输入的数据是一个对象数组,则可以使用该方法(因为,这通常是查询数据库时获取数据的方式)
const表=[
{姓名:“鲍勃·琼斯”,日期:“2019年12月12日”,会议日期:3},
{名称:“安·弗兰克”,日期:“2019年9月12日”,会议日期:4},
{姓名:“鲍勃·琼斯”,日期:“2019年9月12日”,会议日期:2},
{姓名:“弗雷德·史密斯”,日期:“2019年9月12日”,会议:4}
];
let res=table.reduce((res,{name,date,sessions})=>
{
如果(res[[name]])
res[[name]].sessions+=会话;
其他的
res[[name]]={sessions:sessions};
返回res;
}, {});
console.log(res);
您能提供输入数据吗?数组会调用一些括号,其中包含所有括号。这是示例中的错误还是单个数组元素?对象的可能副本似乎格式不正确。使用类似于[{name:'bobjones',sessions:'7'},]
。我正在将这些数据组织到一个JavaScript对象数组中。我看到了一个对象,但没有看到数组