'JavaScript function to multiply by two each element of an array
I want someone to review my code and tell me what I did wrong. I want a function that receives an array of numbers as a parameter and returns a new array with each element multiplied by two.
function duplicate(arr) {
let numDouble = arr;
for (let i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
Total = numDouble * 2;
}
}
return numDouble;
}
const arr = [1,2,3,4,5]
console.log(duplicate(arr))
Solution 1:[1]
Debug
Your solution was not working because you weren't assigning the new value into the array
It will works if you use the following code to do this :
numDouble[i] = numDouble[i] * 2;
By the way, there is no need to check if the value is 0 because 0 * 2 still equal 0 which works perfectly. so you could have removed the if(arr[i]!=0) part.
Also, when you're doing let numDouble = arr; you aren't creating a new array but assigning the existing array reference into the variable.
If you want to create a new array you can use the spread operator which is used for example to duplicates array.
Example : let numDouble = [...arr];
You would have checked if there was a division that might cause a problem
Example :
function duplicate(arr) {
let numDouble = [...arr];
for (let i = 0; i < arr.length; i++) {
numDouble[i] = numDouble[i] * 2;
}
return numDouble;
}
const arr = [1, 2, 3, 4]
const newArr = duplicate(arr)
console.log(newArr)
Another solution
Another solution that might works better is the map function which take a function an apply it to every item of the array
So for example you could do this :
const arr = [1, 2, 3, 4]
const multiplyByTwo = function(number) {
return number * 2
}
console.log(arr.map(multiplyByTwo))
Or even with one line of code using arrow functions :
const arr = [1,2,3,4]
console.log(arr.map(x => x*2))
Solution 2:[2]
There are a couple of errors in your code, outlined below:
let numDouble = arr;
This does not create a new array. Instead it creates a new reference to the same array. This means that when you modify numDouble you're also modifying arr
if(arr[i]!=0)
I am not sure what your trying to do with this condition, but it is unnecessary as 2* 0 = 0 anyway. Unless you want to exclude 0 value from the final array ?
Total = numDouble * 2;
The variable Total is not defined. Also in javascript the convention is to use camelCase for variable names.
Furthermore numDouble is an array here, you can't use the multiplication operator. numDouble * 2 evaluates to NaN
Possible implementation
A possible implementation for your function would be:
function duplicate(arr) {
const doubleNum = []
for (let i = 0; i < arr.length; i++) {
doubleNum.push(2 * arr[i])
}
return doubleNum
}
const arr = [1,2,3,4]
console.log(duplicate(arr))
Although in real life, we would simply use map like so :
const numDouble = arr.map(i => 2*i)
Solution 3:[3]
All you have to do is to change this one line of code:
function duplicate(arr) {
let numDouble = arr;
for(let i = 0; i < arr.length; i++) {
if(arr[i] != 0) {
// Total = numDouble * 2;
numDouble[i] = numDouble[i] * 2;
}
}
return numDouble;
}
Also you don't have to check if value is not equal to 0.
Solution 4:[4]
var a=[2,1,5];
function duplicate(arr){
var Total=[];
for(let i = 0; i < arr.length; i++){
if(arr[i]!=0){
Total.push(arr[i] * 2);
}
}
console.log(Total)
return Total;
}
duplicate(a);
you can use the push() method . it adds one or more elements to the end of an array
Solution 5:[5]
when I enter an array as a parameter with this code it does not duplicate the numbers
function duplicate(arr){
let numDouble = arr;
for(let i=0; i=arr.length; i++){
if(arr!=0){
numDouble[i]= numDouble[i] * 2;
}
}
return numDouble;
}
console.log(duplicate([1,2,3,4,5]));
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 | |
| Solution 2 | RenaudC5 |
| Solution 3 | zielvna |
| Solution 4 | |
| Solution 5 | Alex |
