what should I do to get [3, 1.5, 15, 3.5, 27, 5, 63] output? Should I change the second for loops location ? Thanks in advance.
JavaScript
x
25
25
1
let alternatingMap = function(array,callback1,callback2) {
2
const newArr=[];
3
for (let i = 0; i < array.length ; i += 2) {
4
newNum1 = callback1(array[i]);
5
newArr.push(newNum1)
6
}
7
for (let i = 1; i < array.length ; i += 2) {
8
newNum2 = callback2(array[i]);
9
newArr.push(newNum2);
10
}
11
return newArr;
12
};
13
14
let half = function(num) {
15
return num / 2;
16
}
17
18
let triple = function(num) {
19
return num*3
20
}
21
22
23
let numbers = [1,3,5,7,9,10,21] // My output [3, 15, 27, 63, 1.5, 3.5, 5]
24
console.log(alternatingMap(numbers,triple,half));
25
Advertisement
Answer
You could use only a loop with conditioned callback
JavaScript
1
9
1
let alternatingMap = function (array, callback1, callback2) {
2
const newArr = []
3
for (let i = 0; i < array.length; i += 1) {
4
let newNum = (i % 2 === 0 ? callback1 : callback2)(array[i])
5
newArr.push(newNum)
6
}
7
return newArr
8
}
9
JavaScript
1
19
19
1
let alternatingMap = function (array, callback1, callback2) {
2
const newArr = []
3
for (let i = 0; i < array.length; i += 1) {
4
let newNum = (i % 2 === 0 ? callback1 : callback2)(array[i])
5
newArr.push(newNum)
6
}
7
return newArr
8
}
9
10
let half = function (num) {
11
return num / 2
12
}
13
14
let triple = function (num) {
15
return num * 3
16
}
17
18
let numbers = [1, 3, 5, 7, 9, 10, 21]
19
console.log(alternatingMap(numbers, triple, half))
Moreover, you could still use two loops like your current way, a slight change is to mutate the new array
JavaScript
1
11
11
1
let alternatingMap = function (array, callback1, callback2) {
2
const newArr = []
3
for (let i = 0; i < array.length; i += 2) {
4
newArr[i] = callback1(array[i])
5
}
6
for (let i = 1; i < array.length; i += 2) {
7
newArr[i] = callback2(array[i])
8
}
9
return newArr
10
}
11
JavaScript
1
21
21
1
let alternatingMap = function (array, callback1, callback2) {
2
const newArr = []
3
for (let i = 0; i < array.length; i += 2) {
4
newArr[i] = callback1(array[i])
5
}
6
for (let i = 1; i < array.length; i += 2) {
7
newArr[i] = callback2(array[i])
8
}
9
return newArr
10
}
11
12
let half = function (num) {
13
return num / 2
14
}
15
16
let triple = function (num) {
17
return num * 3
18
}
19
20
let numbers = [1, 3, 5, 7, 9, 10, 21]
21
console.log(alternatingMap(numbers, triple, half))