微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要使用forEach来返回'callback'函数结果为true的元素个数

如何解决需要使用forEach来返回'callback'函数结果为true的元素个数

我需要使用 forEach 来解决这个解决方案,我有点卡住了!我认为我不能像使用 for 循环那样使用“计数”,因为我无法在 forEach 中返回。所以我写的仍然是错误的,但这是我目前所写的:

function count(arr,callback) {
  let result = 0;
  arr.forEach(ele => {
    if (ele === callback())  {
       result += ele.length;
}
  });
  return result;
}

但它并没有通过所有测试:

>
count([1,2,3,4],(e) => e === 3);
Expected: 1 but got: 0
>
count([1,(e) => e > 1);
Expected: 3 but got: 0
>
count([2,1,4,5,8],(e) => e === 2);
Expected: 2 but got: 0
>
count(['a','b'],(e) => e === 'd');
Expected: 0 OK!
>
count([],(e) => e === 'd');
Expected: 0 OK!

有人可以提供任何帮助吗?重申一下,我确实需要使用 forEach 来解决这个问题!

解决方法

你的 callback 是一个函数,它接受一个元素并检查它是否匹配一个值

(e) => e === 2 => 取一个 e 并检查 e 是否为 2

所以在用 forEach 迭代时需要传递数组项

对于每场比赛,您将 result 增加 1 而不是 ele.length

function count(arr,callback) {
  let result = 0;
  arr.forEach(ele => {
    if (callback(ele))  { // Pass ele to the callback
       result += 1; // Add 1 to result for every match
}
  });
  return result;
}
console.log(`Expected: ${count([2,1,4,5,2,8],(e) => e === 2)}`);

,

您的解决方案有两个问题,

  1. 您正在调用 callback 但没有传递值
  2. callback 中您需要一个布尔值,因此再次不需要 ele === callback()

它不工作的原因是因为 ele === callback() 永远不会得到满足。

所以,你可以像这样修改代码

function count(arr,callback) {
  let result = 0;
  arr.forEach(ele => {
    //call the callback with the element
    if (callback(ele)) {
    //Update the count by 1 when truthy value returned from callback
      result += 1;
    }
  });
  return result;
}

console.log(count([1,3,4],(e) => e === 3));
console.log(count([1,(e) => e > 1));
console.log(count([2,(e) => e === 2));
console.log(count(['a','b'],(e) => e === 'd'));
console.log(count([],(e) => e === 'd'));

,

问题出在 if 块中。您需要将元素传递给 callback(),然后检查它是否返回 true 或 false。如果为真,结果加 1。

    function count(arr,callback) {
      let result = 0;
      arr.forEach(ele => {
        if ( callback(ele))  {
           result += 1;
    }
      });
      return result;
    }
console.log(count([1,(e) => e === 'd'));

,

尝试过滤器解决方案:

function count(arr,callback) {
  const result = arr.filter(callback);
  
  return result.length;
}

,
   function count(arr,callback) {
    let result =[];
    arr.forEach(ele => {
      if (callback(ele))  {
         result.push(ele);
      }
    });
    return result.length;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。