7 个用于清理数组的谓词函数

web前端开发

共 3516字,需浏览 8分钟

 ·

2021-07-27 20:17

原文 | https://medium.com/programming-essentials/7-predicate-functions-for-cleaning-an-array-15076b63f5a7
原译 | 杨小二

谓词是一个返回布尔值的函数。
本文介绍7个可以与filter数组方法一起使用来清理数组的谓词函数。
filter方法创建一个新数组,其中包含通过给定谓词函数实现的测试的所有元素。
1、isNumber
isNumber 函数接受一个值,如果是数字则返回 true,否则返回 false。它使用 typeof 运算符检测数字。
function isNumber(value){  return typeof(value) === 'number';}isNumber(1)    //trueisNumber(1.2)  //trueisNumber('1')  //falseisNumber(true) //falseisNumber(null) //false

考虑以下数组。

const arr = [1, 2, 4.1, 'A', true, 5.3];

我们可以将 isNumber 谓词与 filter 方法一起使用,并创建一个仅包含数字的新数组。

const numbers = arr.filter(isNumber);console.log(numbers);//[1, 2, 4.1, 5.3]

2、Number.isInteger

内置 Number.isInteger 检测给定值是否为整数。

Number.isInteger(1)    //trueNumber.isInteger(1.2)  //falseNumber.isInteger('1')  //falseNumber.isInteger(null) //false

以下是从仅包含整数的现有数组创建新数组的示例。

3、布尔值

isTruthy 函数对于真值返回 true,否则返回 false。

function isTruthy(value){  return value ? true : false;}console.log(isTruthy('text')); //trueconsole.log(isTruthy(1));    //trueconsole.log(isTruthy(0));    //falseconsole.log(isTruthy(''));   //falseconsole.log(isTruthy(null)); //falseconsole.log(isTruthy(undefined)); //false

没有必要构建这样的函数,因为已经有一个称为布尔值的内置函数将真值转换为真值,将假值转换为假值。

Boolean('text') //trueBoolean(1)      //trueBoolean(0)      //falseBoolean('')     //falseBoolean(null)   //falseBoolean(undefined) //false

下面是使用布尔函数从数组中删除所有虚假值的示例。

const arr = [1, 2, 4.1, 'A', true, null, undefined, NaN, 5.3, 3];const newArr = arr.filter(Boolean);console.log(newArr);//[1, 2, 4.1, "A", true, 5.3, 3]

4、isDefined

isDefined 检查一个值是否不为空,意思是不等于null 和 undefined

function isDefined(value){  return value !== null & value !== undefined;}

以下示例显示如何使用 isDefined 谓词从数组中删除 null 和 undefined。

const arr = [1, 2, null, 4, undefined, null, 3];const newArr = arr.filter(isDefined);console.log(newArr);//[1, 2, 4, 3]

5、Array.isArray

Array.isArray 内置实用程序检查给定值是否为数组。

Array.isArray([1, 2, 3]);  // trueArray.isArray({});         // falseArray.isArray('123');      // falseArray.isArray(undefined);  // false

以下代码显示了如何仅从列表中选择数组值。

const arr = [  [],  [1],  [1, 3, 5],  null,  0,  {}];const newArr = arr.filter(Array.isArray);console.log(newArr)//[// [],// [1],// [1, 3, 5]//]

6、isObject

isObject 检测值是否为对象。首先,它使用 typeof 运算符检查值的类型,但它也排除了 null,因为 JavaScript 认为 null 也是一个对象。

function isObject(value){ return typeof value === 'object' && value !== null}console.log(isObject({}))  //trueconsole.log(isObject(null)) //falseconsole.log(isObject(1))   //false

接下来是仅从数组中选择对象的示例。

const arr = [{value:1}, {value:2}, null, 1, ''];const objects = arr.filter(isObject);console.log(objects);//[//{value: 1},//{value: 2}//]

7、hasOwnProperty 

接下来,我们创建一个谓词来检测对象是否具有给定的属性。

为此,我们可以使用 hasOwnProperty 对象方法。

const obj = { value : 1 };obj.hasOwnProperty("value");//true

下面的 hasProp 函数接受两个参数,属性的名称和要检查的对象,如果对象包含该属性,则返回 true。否则,它返回 false。

function hasProp(name, obj){  return typeof obj === 'object' && obj !== null &&     obj.hasOwnProperty(name);}

情况是 filter 方法将只提供当前值而不是属性名称。所以我们在使用filter方法的时候需要通过某种方式在谓词函数中设置属性名。

下一个 hasProp 获取属性名称并返回filter函数将使用的谓词函数,该函数仅接受要检查的对象。

function hasProp(name){ return function predicate(obj){   return typeof obj === 'object' && obj !== null &&         obj.hasOwnProperty(name);  }}

下面是我们如何使用 hasProp 函数从数组中仅选择具有 value 属性的对象。

const arr = [  {value: 1},  {char: 'A'},  {value:2 },  null,  {char: 'B'}];console.log(arr.filter(hasProp('value')))//[//0: {value: 1}//1: {value: 2}//]

本文完~

谢谢你的阅读。

学习更多技能

请点击下方公众号


浏览 39
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报