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 。
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
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
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 :回傳比較結果
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。
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,則兩者不同
String
import { includes } from 'ramda';
let data = 'FP in JavaScript';
console.log(includes('JavaScript', data));
includes() 除了用在 array,也可以用在 string 。
let data = 'FP in JavaScript';
console.log(data.includes('JavaScript'));
若用在 string ,則與 String.prototype.includes() 完全相同。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ES6 标准入门(第2版)
阮一峰 / 电子工业出版社 / 2016-1 / 69.00元
ES6(又名 ES2105)是 JavaScript 语言的新标准,2015 年 6 月正式发布后,得到了迅速推广,是目前业界超级活跃的计算机语言。《ES6标准入门(第2版)》是国内仅有的一本 ES6 教程,在前版基础上增补了大量内容——对标准进行了彻底的解读,所有新增的语法知识(包括即将发布的 ES7)都给予了详细介绍,并且紧扣业界开发实践,给出了大量简洁易懂、可以即学即用的示例代码。 《......一起来看看 《ES6 标准入门(第2版)》 这本书的介绍吧!