Javascript 两个对象之间的Id匹配问题
为什么Javascript 两个对象之间的Id匹配问题,javascript,node.js,Javascript,Node.js,为什么param生成了太多的对象,而它最多应该是4个对象。它应该在dbData.Items[dbItemIndex].Id==lineId之间匹配Id,并将元数据存储在param中,包括dbData数组索引 const dbData={ 项目:[ {Id:111}, {Id:222}, {Id:333}, {Id:111}, ] } 常量有效载荷={ 线路:[ {LineId:111}, {LineId:222}, {LineId:333}, {LineId:111}, ] } 函数updat
param
生成了太多的对象,而它最多应该是4个对象。它应该在dbData.Items[dbItemIndex].Id==lineId
之间匹配Id,并将元数据存储在param
中,包括dbData
数组索引
const dbData={
项目:[
{Id:111},
{Id:222},
{Id:333},
{Id:111},
]
}
常量有效载荷={
线路:[
{LineId:111},
{LineId:222},
{LineId:333},
{LineId:111},
]
}
函数updateDbSent(){
常量参数=[];
sentPayload.Lines.forEach((行)=>{
设lineId=line.lineId
for(dbData.Items中的const dbItemIndex){
if(dbData.Items[dbItemIndex].Id==lineId){
参数推({
索引:dbItemIndex,
是的,
Id:lineId,
})
}
}
});
//更新数据库
控制台日志(param);
}
updateDbSent()
您可以从客户端删除重复项以获得正确的输出
目前,在DB中检查两次相同的有效负载ID(在本例中为1111)
要删除重复项,可以使用集合
const lineIds = new Set();
sentPayload.Lines.forEach(lineIdObj => lineIds.add(lineIdObj.LineId))
现在,只需像您在当前代码中所做的那样,在lineid
上循环即可
function updateDbSent() {
const param = [];
lineIds.forEach((lineId) => {
for (const dbItemIndex in dbData.Items) {
if (dbData.Items[dbItemIndex].Id == lineId) {
param.push({
Index: dbItemIndex,
Sent: true,
Id: lineId,
})
}
}
});
//update db
console.log(param);
}
您可以从客户机负载中删除重复项以获得正确的输出 目前,在DB中检查两次相同的有效负载ID(在本例中为1111) 要删除重复项,可以使用集合
const lineIds = new Set();
sentPayload.Lines.forEach(lineIdObj => lineIds.add(lineIdObj.LineId))
现在,只需像您在当前代码中所做的那样,在lineid
上循环即可
function updateDbSent() {
const param = [];
lineIds.forEach((lineId) => {
for (const dbItemIndex in dbData.Items) {
if (dbData.Items[dbItemIndex].Id == lineId) {
param.push({
Index: dbItemIndex,
Sent: true,
Id: lineId,
})
}
}
});
//update db
console.log(param);
}
在foreach中使用回路和蓄能器的磨合,并推动蓄能器
const dbData={
项目:[
{Id:111},
{Id:222},
{Id:333},
{Id:111},
]
}
常量有效载荷={
线路:[
{LineId:111},
{LineId:222},
{LineId:333},
{LineId:111},
]
}
函数updateDbSent(){
常量参数=[];
sentPayload.Lines.forEach((行,累加器)=>{
设lineId=line.lineId;
for(dbData.Items中的const dbItemIndex){
if(dbData.Items[dbItemIndex].Id==lineId){
参数推({
索引:累加器,
是的,
Id:lineId,
});
打破
}
}
});
//更新数据库
控制台日志(param);
}
updateDbSent()
在foreach和push累加器中对循环和累加器使用中断
const dbData={
项目:[
{Id:111},
{Id:222},
{Id:333},
{Id:111},
]
}
常量有效载荷={
线路:[
{LineId:111},
{LineId:222},
{LineId:333},
{LineId:111},
]
}
函数updateDbSent(){
常量参数=[];
sentPayload.Lines.forEach((行,累加器)=>{
设lineId=line.lineId;
for(dbData.Items中的const dbItemIndex){
if(dbData.Items[dbItemIndex].Id==lineId){
参数推({
索引:累加器,
是的,
Id:lineId,
});
打破
}
}
});
//更新数据库
控制台日志(param);
}
updateDbSent()
您的解决方案看起来有点复杂。我会建议一个解决方案,利用减少和发现指数如下
const dbData = {
Items: [{ Id: 111 }, { Id: 222 }, { Id: 333 }, { Id: 111 }],
};
const sentPayload = {
Lines: [{ LineId: 111 }, { LineId: 222 }, { LineId: 333 }, { LineId: 111 }],
};
在作者指出我的解决方案不能使用重复的Id后更新实现。我更新了解决方案,使用reduce并将索引和Id组合作为键
function updateDbSent() {
const result = sentPayload.Lines.reduce((acc, line, lineIndex) => {
const { LineId } = line;
const Index = dbData.Items.findIndex(
(item, itemIndex) => item.Id === LineId && !acc[`${line} - ${itemIndex}`]
);
acc[`${line} - ${Index}`] = {
Index,
Id: LineId,
Sent: true,
};
return acc;
}, {});
return Object.values(result);
//update db
}
console.log(updateDbSent());
您的解决方案看起来有点复杂。我会建议一个解决方案,利用减少和发现指数如下
const dbData = {
Items: [{ Id: 111 }, { Id: 222 }, { Id: 333 }, { Id: 111 }],
};
const sentPayload = {
Lines: [{ LineId: 111 }, { LineId: 222 }, { LineId: 333 }, { LineId: 111 }],
};
在作者指出我的解决方案不能使用重复的Id后更新实现。我更新了解决方案,使用reduce并将索引和Id组合作为键
function updateDbSent() {
const result = sentPayload.Lines.reduce((acc, line, lineIndex) => {
const { LineId } = line;
const Index = dbData.Items.findIndex(
(item, itemIndex) => item.Id === LineId && !acc[`${line} - ${itemIndex}`]
);
acc[`${line} - ${Index}`] = {
Index,
Id: LineId,
Sent: true,
};
return acc;
}, {});
return Object.values(result);
//update db
}
console.log(updateDbSent());
重复Id的索引将是错误的。例如,最后一个Id为111将是3ah ok的索引,这可以作为条件添加到findIndex中。我可以update@I'我会回来查看我的最新解决方案,看看它是否适用于您重复Id的索引将是错误的。例如,最后一个Id为111将是3ah ok的索引,这可以作为条件添加到findIndex中。我可以update@I'我会回来查看我的最新解决方案,看看它是否适合您