So for ex. I have this array with these values :
let arr = [1, 2, 3, 3, 3, 4, 4];
How can I get a new arr as :
let newArr = [3, 3, 4, 4];
while at the same time the original array should be changed as :
let arr = [1, 2, 3];
one 3 is left behind cause there is only one pair of 3.
I tried this code below ( a for loop & splice ) but it is not working properly.
let result = [];
for (let i = 0; i < sorted.length; i ) {
if (sorted[i] === sorted[i 1]) {
let pair = sorted.splice(i, 1);
pair.forEach(el => result.push(el));
}
}
CodePudding user response:
Few things corrected,
- You need to
splicetwo items from the point you see duplicates. Try like this. - Iteration stop condition should be
i < sorted.length - 1as we consider two consecutive items. - Use Array.prototype.concat to join duplicates to the result array.
let sorted = [1, 2, 3, 3, 3, 4, 4];
let result = [];
for (let i = 0; i < sorted.length - 1; i ) {
if (sorted[i] === sorted[i 1]) {
let pair = sorted.splice(i, 2);
result = result.concat(pair)
}
}
console.log(sorted)
console.log(result)
CodePudding user response:
Thanks Sebastian Simon, it working now.
for (let i = 0; i < sorted.length; i ) {
if (sorted[i] === sorted[i 1]) {
let pair = sorted.splice(i, 2);
pair.forEach(el => result.push(el));
i--;
}
}
