首页 > 解决方案 > 使用三元运算符克隆过滤器函数

问题描述

我需要帮助实现我自己版本的 .filter() 使用三元运算符的方法。

const s = [23, 65, 98, 5];

Array.prototype.myFilter = function(callback) {
  this.forEach(a => callback(a) === true ? newArray.push(a) : //??? )
  return newArray;
};

var new_s = s.myFilter(function(item) {
  return item % 2 === 1;
});

我该如何完成?我用什么代替“//???”?

标签: javascript

解决方案


null如果callback(a)不是真的,你可以使用。此外,newArray在您的示例中未定义。

var s = [23, 65, 98, 5];

Array.prototype.myFilter = function(callback) {
  const newArray = []
  this.forEach(a => callback(a) === true ? newArray.push(a) : null )
  return newArray;
 };

 var new_s = s.myFilter(function(item) {
   return item % 2 === 1;
 });
 
 console.log("s:", s)
 console.log("new_s:", new_s)

在这里,不需要使用三元运算符,甚至是一个障碍,因为您不需要 else 分支。还有一个问题是回调的结果是否真的必须是true,或者是否truthy足够。辅助阵列也已过时。

 const s = [23, 65, 98, 5];

Array.prototype.myFilter = function(callback) {
   return this.reduce((accumulator, currentValue) => {
     if (callback(currentValue)) {
        accumulator.push(currentValue)
     }
     return accumulator
    }, []);
};

const new_s = s.myFilter((item) => item % 2 === 1);
     
console.log("s:", s)
console.log("new_s:", new_s)


推荐阅读