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.
let alternatingMap = function(array,callback1,callback2) {
const newArr=[];
for (let i = 0; i < array.length ; i += 2) {
newNum1 = callback1(array[i]);
newArr.push(newNum1)
}
for (let i = 1; i < array.length ; i += 2) {
newNum2 = callback2(array[i]);
newArr.push(newNum2);
}
return newArr;
};
let half = function(num) {
return num / 2;
}
let triple = function(num) {
return num*3
}
let numbers = [1,3,5,7,9,10,21] // My output [3, 15, 27, 63, 1.5, 3.5, 5]
console.log(alternatingMap(numbers,triple,half));
Advertisement
Answer
You could use only a loop with conditioned callback
let alternatingMap = function (array, callback1, callback2) {
const newArr = []
for (let i = 0; i < array.length; i += 1) {
let newNum = (i % 2 === 0 ? callback1 : callback2)(array[i])
newArr.push(newNum)
}
return newArr
}
let alternatingMap = function (array, callback1, callback2) {
const newArr = []
for (let i = 0; i < array.length; i += 1) {
let newNum = (i % 2 === 0 ? callback1 : callback2)(array[i])
newArr.push(newNum)
}
return newArr
}
let half = function (num) {
return num / 2
}
let triple = function (num) {
return num * 3
}
let numbers = [1, 3, 5, 7, 9, 10, 21]
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
let alternatingMap = function (array, callback1, callback2) {
const newArr = []
for (let i = 0; i < array.length; i += 2) {
newArr[i] = callback1(array[i])
}
for (let i = 1; i < array.length; i += 2) {
newArr[i] = callback2(array[i])
}
return newArr
}
let alternatingMap = function (array, callback1, callback2) {
const newArr = []
for (let i = 0; i < array.length; i += 2) {
newArr[i] = callback1(array[i])
}
for (let i = 1; i < array.length; i += 2) {
newArr[i] = callback2(array[i])
}
return newArr
}
let half = function (num) {
return num / 2
}
let triple = function (num) {
return num * 3
}
let numbers = [1, 3, 5, 7, 9, 10, 21]
console.log(alternatingMap(numbers, triple, half))