I have a requirement where I have to reverse an array without changing the index of '#' presents in an array, like below example:
- Array
[18,-4,'#',0,8,'#',5]should return[5, 8, "#", 0, -4, "#", 18], here numbers should be reversed, excluding '#' while keeping the same index.
I have tried to get the correct output, but it doesn't seem to be correct in all scenarios: var arr = [18,-4,'#',0,8,'#',5]; // giving result is correct var arr1 = [18,-4,0,'#',8,'#',5]; // result is not correct
var reverse = function(numbers, start, end){
var temp = numbers[start];
numbers[start] = numbers[end];
numbers[end] = temp;
}
var flip = function(numbers) {
var start = 0;
var end = numbers.length-1;
for(var i=0;i<parseInt(numbers.length/2);i++) {
if(numbers[i] === '#') {
start = i+1;
end = numbers.length - i - i;
reverse(numbers, start, end);
} else if (numbers[numbers.length - i - 1] === '#') {
start = i;
end = numbers.length - i - 2;
reverse(numbers, start, end);
} else {
reverse(numbers, start, end);
}
}
return numbers;
}
var arr = [18,-4,'#',0,8,'#',5];
var arr1 = [18,-4,0,'#',8,'#',5];
console.log(flip(arr));
console.log(flip(arr1));