使用reduce在Javascript中构建过滤函数

2023-12-20

在一次采访中,有人向我提出了一个让我摸不着头脑的问题。我不想花周末担心结果,而是想尝试解决问题,但我无法弄清楚:

使用下面的reduce函数,构建一个过滤函数,该函数将一个数组和一个测试函数作为参数,并返回一个新数组,该数组已根据测试函数过滤了前一个数组的元素。

使用 forEach 或类似的方法会很简单,但要求是使用这个reduce 函数:

function reduce(array, combine, start) {
  var current = start;
  for (var i = 0; i < array.length; i++)
    current = combine(current, array[i]);
  return current;
}

So

var myArray = [0, 1, 3, 5, 9];
console.log(filter(myArray,function(x){
 return x > 2; 
}));

会回来

[3,5,9]

我尝试了以下方法,但收到了非法的退货声明,我什至不确定我是否走在正确的道路上。

function filter(array, test){
 var giveArray = [];
  if(reduce(array,function(current,start){
    return test(current);
  },false)){
    giveArray.push(current);  
  }
 } 
  return giveArray;
}

基本思想是你使用combine函数传递给reduce作为过滤元素的手段。你的做法似乎暗示reduce应该返回一个布尔值,但这不是它的用途。使用test用于条件检查和reduce将用于用传递的元素填充数组。

function filter(array, test) {
  return reduce(array, function(arr, el) {
    // Only add to the array if the test function is true
    if (test(el)) {
      arr.push(el);
    }

    // Always return the same array so you can keep filling it
    return arr;
  }, []); // Give it an empty array to start with
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用reduce在Javascript中构建过滤函数 的相关文章

随机推荐