我正在尝试获取一个javascript函数,该函数将使用callback方法返回一个新数组,并将一个数组和两个回调作为arg

3htmauhk  于 2022-12-17  发布在  Java
关注(0)|答案(1)|浏览(78)

我想让一个函数接受两个回调,并且只有当两个回调都为真时才返回结果:

let myMap = function(array, cb1, cb2) {
  let result = []
  for (let i = 0; i < array.length; i++) {
    let test = cb1(array[i]) && cb2(array[i])
    result.push(test)
  }

  return result
}

所需行为:

let triple = function (n) {
    return 3 * n;
};

let half = function (n) {
    return n / 2;
};
console.log(myMap([7, 3, 2, 9, 8], triple, half));
// [ 21, 1.5, 6, 4.5, 24 ]
6yoyoihd

6yoyoihd1#

从期望的结果来看,您似乎希望对不同数组元素的回调进行“交替"调用,而不是仅在回调为真时才推送/返回,而是根据其中一个回调的结果(由索引决定)无条件地推送。

let myMap = function(array, cb1, cb2) {
  let emptyArr = []
  for (let i = 0; i < array.length; i++) {
    let test = (i % 2 === 0 ? cb1 : cb2)(array[i]);
    emptyArr.push(test);
  }
  return emptyArr
}

let triple = function(n) {
  return 3 * n;
};

let half = function(n) {
  return n / 2;
};
console.log(myMap([7, 3, 2, 9, 8], triple, half));

或者清理了一些

const myMap = (array, cb1, cb2) => array.map(
  (val, i) => (i % 2 === 0 ? cb1 : cb2)(val)
);
const triple = n => 3 * n;
const half = n => n / 2;
console.log(myMap([7, 3, 2, 9, 8], triple, half));

相关问题