如何將 String 前後顛倒 ?
栏目: JavaScript · 发布时间: 7年前
内容简介:將 String 前後顛倒在實務上可能不太常見,不過用來練功倒是不錯。VS Code 1.33.1Quokka 1.0.209
將 String 前後顛倒在實務上可能不太常見,不過用來練功倒是不錯。
Version
VS Code 1.33.1
Quokka 1.0.209
Ramda 0.26.1
ECMAScript
import { reverse } from 'ramda';
let data = 'sam';
let revStr = arg => arg.split('').reverse().join('');
console.log(revStr(data));
String 沒有 reverse() ,但 array 有:
split() reverse() join()
Ramda
import { split, reverse, join, pipe } from 'ramda';
let data = 'sam';
let revStr = pipe(
split(''),
reverse,
join('')
);
console.log(revStr(data));
想法有了,且 Ramda 也提供了 split() 、 reverse() 與 join() 的 function 版本,因此已可以改用 Ramda 實現 point-free。
reverse()
import { reverse } from 'ramda';
let data = 'sam';
console.log(reverse(data));
事實上 Ramda 的 reverse() ,除了用於 array 外,也可以用在 string。
reverse()
[a] -> [a]
String -> String
將 array 或 string 顛倒
Q:為什麼 reverse() 這麼神,可同時處理 array 或 string ?
從 reverse() source code 發現,其實一點也不神。
var reverse = _curry1(function reverse(list) {
return _isString(list)
? list.split('').reverse().join('')
: Array.prototype.slice.call(list, 0).reverse();
});
Ramda 先判斷是否為 string,若是 string 一樣走 spilt() 、 reverse() 、 join() 流程;若是 array,則先 slice() 一份新的 array,再 reverse() 之,因為內建的 reverse() 是直接改變原有 array,屬 side effect 寫法。
Ramda 的 reverse() 雖然同時支援 array 與 string,實則經過 _isString() 判斷而分別處理
Conclusion
-
split()與join()是常見的組合,split()將 string 轉成 array 後,可借用 array 豐富的 function 處理,最後再使用join()還原成 string,可視為 pattern 使用 - 別忘了 Ramda 的
reverse()除了支援 array 外,也支援 string
Reference
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ajax Design Patterns
Michael Mahemoff / O'Reilly Media / 2006-06-29 / USD 44.99
Ajax, or Asynchronous JavaScript and XML, exploded onto the scene in the spring of 2005 and remains the hottest story among web developers. With its rich combination of technologies, Ajax provides a s......一起来看看 《Ajax Design Patterns》 这本书的介绍吧!