How to sort elements in array without changing other elements indexes? [duplicate]
This question already has an answer here:
How to sort an array of odd numbers in ascending order, but keep even numbers at their position?
6 answers
I have this array:
var arr = [5, 3, 2, 8, 1, 4];
I'm trying to sort ONLY the elements that are odd values so I want this
output:
[1, 3, 2, 8, 5, 4]
As you can see the even elements don't change their position. Can anyone tell me what I'm missing? Here's my code:
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0){
arr.push(val);
}
return arr.sort();
}, );
return oddElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4]));
I know I can use slice to add elements to array, but I'm stuck on how to get the indexes and put the elements in the array.
javascript
marked as duplicate by Nina Scholz
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
2 days ago
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
This question already has an answer here:
How to sort an array of odd numbers in ascending order, but keep even numbers at their position?
6 answers
I have this array:
var arr = [5, 3, 2, 8, 1, 4];
I'm trying to sort ONLY the elements that are odd values so I want this
output:
[1, 3, 2, 8, 5, 4]
As you can see the even elements don't change their position. Can anyone tell me what I'm missing? Here's my code:
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0){
arr.push(val);
}
return arr.sort();
}, );
return oddElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4]));
I know I can use slice to add elements to array, but I'm stuck on how to get the indexes and put the elements in the array.
javascript
marked as duplicate by Nina Scholz
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
2 days ago
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
This question already has an answer here:
How to sort an array of odd numbers in ascending order, but keep even numbers at their position?
6 answers
I have this array:
var arr = [5, 3, 2, 8, 1, 4];
I'm trying to sort ONLY the elements that are odd values so I want this
output:
[1, 3, 2, 8, 5, 4]
As you can see the even elements don't change their position. Can anyone tell me what I'm missing? Here's my code:
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0){
arr.push(val);
}
return arr.sort();
}, );
return oddElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4]));
I know I can use slice to add elements to array, but I'm stuck on how to get the indexes and put the elements in the array.
javascript
This question already has an answer here:
How to sort an array of odd numbers in ascending order, but keep even numbers at their position?
6 answers
I have this array:
var arr = [5, 3, 2, 8, 1, 4];
I'm trying to sort ONLY the elements that are odd values so I want this
output:
[1, 3, 2, 8, 5, 4]
As you can see the even elements don't change their position. Can anyone tell me what I'm missing? Here's my code:
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0){
arr.push(val);
}
return arr.sort();
}, );
return oddElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4]));
I know I can use slice to add elements to array, but I'm stuck on how to get the indexes and put the elements in the array.
This question already has an answer here:
How to sort an array of odd numbers in ascending order, but keep even numbers at their position?
6 answers
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0){
arr.push(val);
}
return arr.sort();
}, );
return oddElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4]));
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0){
arr.push(val);
}
return arr.sort();
}, );
return oddElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4]));
javascript
javascript
edited 2 days ago
progx
asked 2 days ago
progxprogx
331522
331522
marked as duplicate by Nina Scholz
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
2 days ago
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by Nina Scholz
StackExchange.ready(function() {
if (StackExchange.options.isMobile) return;
$('.dupe-hammer-message-hover:not(.hover-bound)').each(function() {
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');
$hover.hover(
function() {
$hover.showInfoMessage('', {
messageElement: $msg.clone().show(),
transient: false,
position: { my: 'bottom left', at: 'top center', offsetTop: -7 },
dismissable: false,
relativeToBody: true
});
},
function() {
StackExchange.helpers.removeMessages();
}
);
});
});
2 days ago
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
One option is to keep track of the indicies of the odd numbers in the original array, and after .reduce
ing and sorting, then iterate through the original odd indicies and reassign, taking from the sorted odd array:
function oddSort(array) {
const oddIndicies = ;
const newArr = array.slice();
const sortedOdd = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
oddIndicies.push(index);
}
return arr;
}, )
.sort((a, b) => a - b);
while (oddIndicies.length > 0) {
newArr[oddIndicies.shift()] = sortedOdd.shift();
}
return newArr;
}
console.log(oddSort([5, 3, 2, 8, 1, 4]));
console.log(oddSort([5, 3, 2, 8, 1, 4, 11 ]));
your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Ah, the 11 was throwing things off, since.sort
sorts lexiographically - use a custom.sort
function instead, see edit
– CertainPerformance
2 days ago
Thanks a lot bro!
– progx
2 days ago
add a comment |
First sort only the odd numbers and put it in an array oddSorted
. Then map
through each element in the original array and check if the current element is odd, if odd replace it with the corresponding sorted number from the oddSorted
array.
function sortOddElements(arr){
var oddSorted = arr.filter(ele => ele %2 != 0).sort((a, b) => a - b);
var evenNotSorted = arr.map((ele, idx) => {
if(ele % 2 != 0){
return oddSorted.shift();
}
return ele;
});
return evenNotSorted;
}
var arr = [5, 3, 2, 8, 1, 4];
console.log(sortOddElements(arr));
arr = [5, 3, 2, 8, 1, 4, 11 ];
console.log(sortOddElements(arr));
easy-to-follow answer. now, can you think of a way to do this without having to do the% 2 != 0
calculation twice per element? :D
– user633183
2 days ago
One thing that comes to my mind is checking whether the current element is included in theoddSorted
array, if yes then replace the current number with the first number from theoddSorted
array. This will also work as if the current element is included in theoddSorted
array then it implies that the number is odd and hence there is no need to check it again. But do you think this will improve the performance?
– Amardeep Bhowmick
2 days ago
You don't need to clonearr
. Filter will return a new array anyway.
– kremerd
2 days ago
add a comment |
I modified your code a little bit to fulfill your objective. Take a look below
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
}
return arr.sort(function(a, b){return a - b});
}, );
var index = 0;
var finalElements = ;
for(var i=0; i<array.length; i++) {
var element = array[i];
if(element %2 !==0) {
finalElements.push(oddElements[index]);
index++;
} else {
finalElements.push(element);
}
}
return finalElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4, 11]));
Remember, the default sort function sorts the values alphabetically. That's why you can't just use arr.sort()
Nope, your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Okay... I'm taking a look at it
– Tanmoy Krishna Das
2 days ago
The problem was with the sort function. The default sort function sorts the values alphabetically. That's why you can't just use arr.sort(). I modified the code to reflect your needs.
– Tanmoy Krishna Das
2 days ago
add a comment |
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
One option is to keep track of the indicies of the odd numbers in the original array, and after .reduce
ing and sorting, then iterate through the original odd indicies and reassign, taking from the sorted odd array:
function oddSort(array) {
const oddIndicies = ;
const newArr = array.slice();
const sortedOdd = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
oddIndicies.push(index);
}
return arr;
}, )
.sort((a, b) => a - b);
while (oddIndicies.length > 0) {
newArr[oddIndicies.shift()] = sortedOdd.shift();
}
return newArr;
}
console.log(oddSort([5, 3, 2, 8, 1, 4]));
console.log(oddSort([5, 3, 2, 8, 1, 4, 11 ]));
your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Ah, the 11 was throwing things off, since.sort
sorts lexiographically - use a custom.sort
function instead, see edit
– CertainPerformance
2 days ago
Thanks a lot bro!
– progx
2 days ago
add a comment |
One option is to keep track of the indicies of the odd numbers in the original array, and after .reduce
ing and sorting, then iterate through the original odd indicies and reassign, taking from the sorted odd array:
function oddSort(array) {
const oddIndicies = ;
const newArr = array.slice();
const sortedOdd = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
oddIndicies.push(index);
}
return arr;
}, )
.sort((a, b) => a - b);
while (oddIndicies.length > 0) {
newArr[oddIndicies.shift()] = sortedOdd.shift();
}
return newArr;
}
console.log(oddSort([5, 3, 2, 8, 1, 4]));
console.log(oddSort([5, 3, 2, 8, 1, 4, 11 ]));
your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Ah, the 11 was throwing things off, since.sort
sorts lexiographically - use a custom.sort
function instead, see edit
– CertainPerformance
2 days ago
Thanks a lot bro!
– progx
2 days ago
add a comment |
One option is to keep track of the indicies of the odd numbers in the original array, and after .reduce
ing and sorting, then iterate through the original odd indicies and reassign, taking from the sorted odd array:
function oddSort(array) {
const oddIndicies = ;
const newArr = array.slice();
const sortedOdd = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
oddIndicies.push(index);
}
return arr;
}, )
.sort((a, b) => a - b);
while (oddIndicies.length > 0) {
newArr[oddIndicies.shift()] = sortedOdd.shift();
}
return newArr;
}
console.log(oddSort([5, 3, 2, 8, 1, 4]));
console.log(oddSort([5, 3, 2, 8, 1, 4, 11 ]));
One option is to keep track of the indicies of the odd numbers in the original array, and after .reduce
ing and sorting, then iterate through the original odd indicies and reassign, taking from the sorted odd array:
function oddSort(array) {
const oddIndicies = ;
const newArr = array.slice();
const sortedOdd = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
oddIndicies.push(index);
}
return arr;
}, )
.sort((a, b) => a - b);
while (oddIndicies.length > 0) {
newArr[oddIndicies.shift()] = sortedOdd.shift();
}
return newArr;
}
console.log(oddSort([5, 3, 2, 8, 1, 4]));
console.log(oddSort([5, 3, 2, 8, 1, 4, 11 ]));
function oddSort(array) {
const oddIndicies = ;
const newArr = array.slice();
const sortedOdd = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
oddIndicies.push(index);
}
return arr;
}, )
.sort((a, b) => a - b);
while (oddIndicies.length > 0) {
newArr[oddIndicies.shift()] = sortedOdd.shift();
}
return newArr;
}
console.log(oddSort([5, 3, 2, 8, 1, 4]));
console.log(oddSort([5, 3, 2, 8, 1, 4, 11 ]));
function oddSort(array) {
const oddIndicies = ;
const newArr = array.slice();
const sortedOdd = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
oddIndicies.push(index);
}
return arr;
}, )
.sort((a, b) => a - b);
while (oddIndicies.length > 0) {
newArr[oddIndicies.shift()] = sortedOdd.shift();
}
return newArr;
}
console.log(oddSort([5, 3, 2, 8, 1, 4]));
console.log(oddSort([5, 3, 2, 8, 1, 4, 11 ]));
edited 2 days ago
answered 2 days ago
CertainPerformanceCertainPerformance
81.3k143865
81.3k143865
your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Ah, the 11 was throwing things off, since.sort
sorts lexiographically - use a custom.sort
function instead, see edit
– CertainPerformance
2 days ago
Thanks a lot bro!
– progx
2 days ago
add a comment |
your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Ah, the 11 was throwing things off, since.sort
sorts lexiographically - use a custom.sort
function instead, see edit
– CertainPerformance
2 days ago
Thanks a lot bro!
– progx
2 days ago
your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Ah, the 11 was throwing things off, since
.sort
sorts lexiographically - use a custom .sort
function instead, see edit– CertainPerformance
2 days ago
Ah, the 11 was throwing things off, since
.sort
sorts lexiographically - use a custom .sort
function instead, see edit– CertainPerformance
2 days ago
Thanks a lot bro!
– progx
2 days ago
Thanks a lot bro!
– progx
2 days ago
add a comment |
First sort only the odd numbers and put it in an array oddSorted
. Then map
through each element in the original array and check if the current element is odd, if odd replace it with the corresponding sorted number from the oddSorted
array.
function sortOddElements(arr){
var oddSorted = arr.filter(ele => ele %2 != 0).sort((a, b) => a - b);
var evenNotSorted = arr.map((ele, idx) => {
if(ele % 2 != 0){
return oddSorted.shift();
}
return ele;
});
return evenNotSorted;
}
var arr = [5, 3, 2, 8, 1, 4];
console.log(sortOddElements(arr));
arr = [5, 3, 2, 8, 1, 4, 11 ];
console.log(sortOddElements(arr));
easy-to-follow answer. now, can you think of a way to do this without having to do the% 2 != 0
calculation twice per element? :D
– user633183
2 days ago
One thing that comes to my mind is checking whether the current element is included in theoddSorted
array, if yes then replace the current number with the first number from theoddSorted
array. This will also work as if the current element is included in theoddSorted
array then it implies that the number is odd and hence there is no need to check it again. But do you think this will improve the performance?
– Amardeep Bhowmick
2 days ago
You don't need to clonearr
. Filter will return a new array anyway.
– kremerd
2 days ago
add a comment |
First sort only the odd numbers and put it in an array oddSorted
. Then map
through each element in the original array and check if the current element is odd, if odd replace it with the corresponding sorted number from the oddSorted
array.
function sortOddElements(arr){
var oddSorted = arr.filter(ele => ele %2 != 0).sort((a, b) => a - b);
var evenNotSorted = arr.map((ele, idx) => {
if(ele % 2 != 0){
return oddSorted.shift();
}
return ele;
});
return evenNotSorted;
}
var arr = [5, 3, 2, 8, 1, 4];
console.log(sortOddElements(arr));
arr = [5, 3, 2, 8, 1, 4, 11 ];
console.log(sortOddElements(arr));
easy-to-follow answer. now, can you think of a way to do this without having to do the% 2 != 0
calculation twice per element? :D
– user633183
2 days ago
One thing that comes to my mind is checking whether the current element is included in theoddSorted
array, if yes then replace the current number with the first number from theoddSorted
array. This will also work as if the current element is included in theoddSorted
array then it implies that the number is odd and hence there is no need to check it again. But do you think this will improve the performance?
– Amardeep Bhowmick
2 days ago
You don't need to clonearr
. Filter will return a new array anyway.
– kremerd
2 days ago
add a comment |
First sort only the odd numbers and put it in an array oddSorted
. Then map
through each element in the original array and check if the current element is odd, if odd replace it with the corresponding sorted number from the oddSorted
array.
function sortOddElements(arr){
var oddSorted = arr.filter(ele => ele %2 != 0).sort((a, b) => a - b);
var evenNotSorted = arr.map((ele, idx) => {
if(ele % 2 != 0){
return oddSorted.shift();
}
return ele;
});
return evenNotSorted;
}
var arr = [5, 3, 2, 8, 1, 4];
console.log(sortOddElements(arr));
arr = [5, 3, 2, 8, 1, 4, 11 ];
console.log(sortOddElements(arr));
First sort only the odd numbers and put it in an array oddSorted
. Then map
through each element in the original array and check if the current element is odd, if odd replace it with the corresponding sorted number from the oddSorted
array.
function sortOddElements(arr){
var oddSorted = arr.filter(ele => ele %2 != 0).sort((a, b) => a - b);
var evenNotSorted = arr.map((ele, idx) => {
if(ele % 2 != 0){
return oddSorted.shift();
}
return ele;
});
return evenNotSorted;
}
var arr = [5, 3, 2, 8, 1, 4];
console.log(sortOddElements(arr));
arr = [5, 3, 2, 8, 1, 4, 11 ];
console.log(sortOddElements(arr));
function sortOddElements(arr){
var oddSorted = arr.filter(ele => ele %2 != 0).sort((a, b) => a - b);
var evenNotSorted = arr.map((ele, idx) => {
if(ele % 2 != 0){
return oddSorted.shift();
}
return ele;
});
return evenNotSorted;
}
var arr = [5, 3, 2, 8, 1, 4];
console.log(sortOddElements(arr));
arr = [5, 3, 2, 8, 1, 4, 11 ];
console.log(sortOddElements(arr));
function sortOddElements(arr){
var oddSorted = arr.filter(ele => ele %2 != 0).sort((a, b) => a - b);
var evenNotSorted = arr.map((ele, idx) => {
if(ele % 2 != 0){
return oddSorted.shift();
}
return ele;
});
return evenNotSorted;
}
var arr = [5, 3, 2, 8, 1, 4];
console.log(sortOddElements(arr));
arr = [5, 3, 2, 8, 1, 4, 11 ];
console.log(sortOddElements(arr));
edited 2 days ago
answered 2 days ago
Amardeep BhowmickAmardeep Bhowmick
2,0351821
2,0351821
easy-to-follow answer. now, can you think of a way to do this without having to do the% 2 != 0
calculation twice per element? :D
– user633183
2 days ago
One thing that comes to my mind is checking whether the current element is included in theoddSorted
array, if yes then replace the current number with the first number from theoddSorted
array. This will also work as if the current element is included in theoddSorted
array then it implies that the number is odd and hence there is no need to check it again. But do you think this will improve the performance?
– Amardeep Bhowmick
2 days ago
You don't need to clonearr
. Filter will return a new array anyway.
– kremerd
2 days ago
add a comment |
easy-to-follow answer. now, can you think of a way to do this without having to do the% 2 != 0
calculation twice per element? :D
– user633183
2 days ago
One thing that comes to my mind is checking whether the current element is included in theoddSorted
array, if yes then replace the current number with the first number from theoddSorted
array. This will also work as if the current element is included in theoddSorted
array then it implies that the number is odd and hence there is no need to check it again. But do you think this will improve the performance?
– Amardeep Bhowmick
2 days ago
You don't need to clonearr
. Filter will return a new array anyway.
– kremerd
2 days ago
easy-to-follow answer. now, can you think of a way to do this without having to do the
% 2 != 0
calculation twice per element? :D– user633183
2 days ago
easy-to-follow answer. now, can you think of a way to do this without having to do the
% 2 != 0
calculation twice per element? :D– user633183
2 days ago
One thing that comes to my mind is checking whether the current element is included in the
oddSorted
array, if yes then replace the current number with the first number from the oddSorted
array. This will also work as if the current element is included in the oddSorted
array then it implies that the number is odd and hence there is no need to check it again. But do you think this will improve the performance?– Amardeep Bhowmick
2 days ago
One thing that comes to my mind is checking whether the current element is included in the
oddSorted
array, if yes then replace the current number with the first number from the oddSorted
array. This will also work as if the current element is included in the oddSorted
array then it implies that the number is odd and hence there is no need to check it again. But do you think this will improve the performance?– Amardeep Bhowmick
2 days ago
You don't need to clone
arr
. Filter will return a new array anyway.– kremerd
2 days ago
You don't need to clone
arr
. Filter will return a new array anyway.– kremerd
2 days ago
add a comment |
I modified your code a little bit to fulfill your objective. Take a look below
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
}
return arr.sort(function(a, b){return a - b});
}, );
var index = 0;
var finalElements = ;
for(var i=0; i<array.length; i++) {
var element = array[i];
if(element %2 !==0) {
finalElements.push(oddElements[index]);
index++;
} else {
finalElements.push(element);
}
}
return finalElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4, 11]));
Remember, the default sort function sorts the values alphabetically. That's why you can't just use arr.sort()
Nope, your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Okay... I'm taking a look at it
– Tanmoy Krishna Das
2 days ago
The problem was with the sort function. The default sort function sorts the values alphabetically. That's why you can't just use arr.sort(). I modified the code to reflect your needs.
– Tanmoy Krishna Das
2 days ago
add a comment |
I modified your code a little bit to fulfill your objective. Take a look below
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
}
return arr.sort(function(a, b){return a - b});
}, );
var index = 0;
var finalElements = ;
for(var i=0; i<array.length; i++) {
var element = array[i];
if(element %2 !==0) {
finalElements.push(oddElements[index]);
index++;
} else {
finalElements.push(element);
}
}
return finalElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4, 11]));
Remember, the default sort function sorts the values alphabetically. That's why you can't just use arr.sort()
Nope, your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Okay... I'm taking a look at it
– Tanmoy Krishna Das
2 days ago
The problem was with the sort function. The default sort function sorts the values alphabetically. That's why you can't just use arr.sort(). I modified the code to reflect your needs.
– Tanmoy Krishna Das
2 days ago
add a comment |
I modified your code a little bit to fulfill your objective. Take a look below
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
}
return arr.sort(function(a, b){return a - b});
}, );
var index = 0;
var finalElements = ;
for(var i=0; i<array.length; i++) {
var element = array[i];
if(element %2 !==0) {
finalElements.push(oddElements[index]);
index++;
} else {
finalElements.push(element);
}
}
return finalElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4, 11]));
Remember, the default sort function sorts the values alphabetically. That's why you can't just use arr.sort()
I modified your code a little bit to fulfill your objective. Take a look below
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
}
return arr.sort(function(a, b){return a - b});
}, );
var index = 0;
var finalElements = ;
for(var i=0; i<array.length; i++) {
var element = array[i];
if(element %2 !==0) {
finalElements.push(oddElements[index]);
index++;
} else {
finalElements.push(element);
}
}
return finalElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4, 11]));
Remember, the default sort function sorts the values alphabetically. That's why you can't just use arr.sort()
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
}
return arr.sort(function(a, b){return a - b});
}, );
var index = 0;
var finalElements = ;
for(var i=0; i<array.length; i++) {
var element = array[i];
if(element %2 !==0) {
finalElements.push(oddElements[index]);
index++;
} else {
finalElements.push(element);
}
}
return finalElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4, 11]));
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
}
return arr.sort(function(a, b){return a - b});
}, );
var index = 0;
var finalElements = ;
for(var i=0; i<array.length; i++) {
var element = array[i];
if(element %2 !==0) {
finalElements.push(oddElements[index]);
index++;
} else {
finalElements.push(element);
}
}
return finalElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4, 11]));
edited 2 days ago
answered 2 days ago
Tanmoy Krishna DasTanmoy Krishna Das
585213
585213
Nope, your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Okay... I'm taking a look at it
– Tanmoy Krishna Das
2 days ago
The problem was with the sort function. The default sort function sorts the values alphabetically. That's why you can't just use arr.sort(). I modified the code to reflect your needs.
– Tanmoy Krishna Das
2 days ago
add a comment |
Nope, your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Okay... I'm taking a look at it
– Tanmoy Krishna Das
2 days ago
The problem was with the sort function. The default sort function sorts the values alphabetically. That's why you can't just use arr.sort(). I modified the code to reflect your needs.
– Tanmoy Krishna Das
2 days ago
Nope, your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Nope, your solution doesn't work when I pass this array: [5, 3, 2, 8, 1, 4, 11 ], it supposes to return [1, 3, 2, 8, 5, 4, 11], but it returns [1, 11, 2, 8, 3, 4, 5]
– progx
2 days ago
Okay... I'm taking a look at it
– Tanmoy Krishna Das
2 days ago
Okay... I'm taking a look at it
– Tanmoy Krishna Das
2 days ago
The problem was with the sort function. The default sort function sorts the values alphabetically. That's why you can't just use arr.sort(). I modified the code to reflect your needs.
– Tanmoy Krishna Das
2 days ago
The problem was with the sort function. The default sort function sorts the values alphabetically. That's why you can't just use arr.sort(). I modified the code to reflect your needs.
– Tanmoy Krishna Das
2 days ago
add a comment |