javascript - 使用三元运算符克隆过滤器函数
问题描述
我需要帮助实现我自己版本的 .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;
});
我该如何完成?我用什么代替“//???”?
解决方案
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)
推荐阅读
- javafx - 如何在不支持 css 字符串变量的情况下通过 CSS 在 JavaFX 中切换字体系列?
- node.js - 需要使用 PM2 服务器托管多个节点?
- javascript - 如何在 JavaScript 中合并两个数组的数组元素?
- sql - 带有 IF 语句的 SQL 中的动态消息
- javascript - 如何设置输入限制?
- c# - Unity3d - 更改天空盒颜色时反射不会更新
- perforce - perforce:如何检查最近(半年期间)修改的文件以及修改这些文件的人
- haskell - 如何返回在 Haskell 编程中交替组合两个函数列表产生的函数?
- android - 我可以在执行航点任务时向任何方向旋转飞机偏航吗?
- python - Django中多对多字段的PATCH