Ramda 之 includes()

栏目: JavaScript · 发布时间: 6年前

内容简介:實務上我們常需判斷某一個值是否存在於 Array 內,若存在則傳回VS Code 1.31.1Quokka 1.0.212

實務上我們常需判斷某一個值是否存在於 Array 內,若存在則傳回 true ,若不存在則傳回 false ,對於簡單的需求,我們會希望不要傳入 Callback,直接傳入 Data 即可。

Version

VS Code 1.31.1

Quokka 1.0.212

Ramda 0.26.1

Imperative

let data = [1, 2, 3];

let includes = arg => arr => {
  for(let elem of arr) {
    if (elem === arg) return true;
  }
  return false;
}

console.log(includes(1)(data));

建立 includes() ,imperative 會使用 for loop 搭配 if 判斷,若找到就直接回傳 true 結束,若都找不到則回傳 false

Ramda 之 includes()

Array.prototype.includes()

let data = [1, 2, 3];

console.log(data.includes(1));

Array.prototype 有內建 includes() ,直接傳入 data 即可。

就功能而言兩者都一樣,但 Array.prototype.includes() 屬 OOP 風格,為 data 的 method,而 includes() 為 FP 風格,data 以 argument 傳入 function,且為最後一個 argument,方便 point-free

Ramda 之 includes()

Functional

import { any } from 'ramda';

let data = [1, 2, 3];

let includes = arg => any(x => x === arg);

console.log(includes(1)(data));

其實我們大可不必自己寫 for loop,可藉助 Ramda 的 any() 實現出 includes()

any()

(a -> Boolean) -> [a] -> Boolean

判斷符合條件的 data 是否存在於 array

Ramda 之 includes()

includes()

Primitive

import { includes } from 'ramda';

let data = [1, 2, 3];

console.log(includes(1)(data));

事實上 Ramda 已經提供 includes() ,可直接使用。

includes()

a → [a] → Boolean

判斷 data 是否存在於 array

a : 欲判斷的 data

[a] :data 為 array

Boolean :回傳比較結果

Ramda 之 includes()

Object

import { includes } from 'ramda';

let data = [
  { title: 'FP in JavaScript', price: 100 },
  { title: 'RxJS in Action', price: 200 },
  { title: 'Speaking JavaScript', price: 300 }
];

console.log(includes({ title: 'FP in JavaScript', price: 100 })(data));

includes() 也可判斷 object 是否存在於 array,值得注意的是 includes() 使用 equals() 判斷,而非 === ,比較的是 object property,而非 object reference。

Ramda 之 includes()

import { includes } from 'ramda';

let data = [
  { title: 'FP in JavaScript', price: 100 },
  { title: 'RxJS in Action', price: 200 },
  { title: 'Speaking JavaScript', price: 300 }
];

console.log(data.includes({ title: 'FP in JavaScript', price: 100 }));

若使用 Array.prototype.includes() ,比較的是 object reference,明顯與 includes() 不同。

對於 primitive, includes()Array.prototype.includes() 完全相同;但對於 object,則兩者不同

Ramda 之 includes()

String

import { includes } from 'ramda';

let data = 'FP in JavaScript';

console.log(includes('JavaScript', data));

includes() 除了用在 array,也可以用在 string

Ramda 之 includes()

let data = 'FP in JavaScript';

console.log(data.includes('JavaScript'));

若用在 string ,則與 String.prototype.includes() 完全相同。

Ramda 之 includes()


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

信息论、推理与学习算法

信息论、推理与学习算法

麦凯 / 高等教育出版社 / 2006-7 / 59.00元

本书是英国剑桥大学卡文迪许实验室的著名学者David J.C.MacKay博士总结多年教学经验和科研成果,于2003年推出的一部力作。本书作者不仅透彻地论述了传统信息论的内容和最新编码算法,而且以高度的学科驾驭能力,匠心独具地在一个统一框架下讨论了贝叶斯数据建模、蒙特卡罗方法、聚类算法、神经网络等属于机器学习和推理领域的主题,从而很好地将诸多学科的技术内涵融会贯通。本书注重理论与实际的结合,内容组......一起来看看 《信息论、推理与学习算法》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具