'Having trouble in sequencing objects in an array
I have an Array of objects which I fetch from Database; array looks like below:
[
{name:"conrad",sequence:1},
{name:"sam",sequence:1},
{name:"ron",sequence:1},
{name:"dan",sequence:2},
{name:"neil",sequence:2},
]
when I add another object in through form or onclick; Example object:
{name:"lily",sequence:1}
desired output required is as follows:
[
{name:"conrad",sequence:2},
{name:"sam",sequence:3},
{name:"ron",sequence:4},
{name:"dan",sequence:5},
{name:"neil",sequence:6},
{name:"lily",sequence:1}
]
due to duplicate sequence I am not able to get proper sequencing I got as follows:
[
{name:"conrad",sequence:2},
{name:"sam",sequence:2},
{name:"ron",sequence:2},
{name:"dan",sequence:3},
{name:"neil",sequence:3},
{name:"lily",sequence:1}
]
any help would be appreciated
my code:
let findSeq = await model.find({ sequence: data.sequence, services: data.services, site_id: data.site_id });
if(findSeq.length > 0){
let allSeq = await model.find({ services: data.services, site_id: data.site_id }).sort({sequence : 1});
if(allSeq.length > 0){
for (let i = 0; i < allSeq.length; i++) {
let old_id = new mongo.ObjectID(allSeq[i]._id);
let newSq = parseInt(allSeq[i].sequence) + 1;
if(data.id || data._id){
if(allSeq[i].sequence >= data.sequence && data._id != old_id) {
allSeq[i].sequence = newSq;
delete allSeq[i].id;
delete allSeq[i]._id;
var updateSeq = await model.updateOne({ _id: old_id }, allSeq[i]);
if((i + 1) < allSeq.length){
if(newSq != allSeq[i+1].sequence && newSq < allSeq[i+1].sequence){
break;
}
}
}
} else {
if(allSeq[i].sequence >= data.sequence) {
allSeq[i].sequence = newSq;
delete allSeq[i].id;
delete allSeq[i]._id;
var updateSeq = await model.updateOne({ _id: old_id }, allSeq[i]);
console.log(updateSeq);
if((i + 1) < allSeq.length){
if(newSq != allSeq[i+1].sequence && newSq < allSeq[i+1].sequence){
break;
}
}
}
}
}
}
}
Solution 1:[1]
`let objArr = [
{ name: "conrad", sequence: 1 },
{ name: "sam", sequence: 1 },
{ name: "ron", sequence: 1 },
{ name: "dan", sequence: 2 },
{ name: "neil", sequence: 6},
];
let addObj = { name: "lily", sequence: 1 };
let nextseq = parseInt(addObj.sequence);
for (let i = 0; i < objArr.length; i++) {
nextseq = getnextSeq(nextseq);
console.log("nextseq",nextseq);
objArr[i].sequence = nextseq;
nextseq++;
}
objArr.push(addObj)
console.log(objArr);
function getnextSeq(nextSeq) {
let duplicateArr = objArr.filter((e) => e.sequence == nextSeq);
if (duplicateArr.length > 1) {
nextSeq++
duplicateArr.pop();
getnextSeq(nextSeq)
}
return nextSeq
}`
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Akshay Narkar |
