Ramda 之 addIndex()

栏目: 编程语言 · 发布时间: 7年前

内容简介:若想在VS Code 1.33.1Quokka 1.0.209

若想在 Array.prototype.map() 的 Callback 得知目前 Element 的 Index,其 Callback 的第二個參數就是 Index,但 Ramda 的 map() 並沒有提供如此功能,該如何解決呢 ?

Version

VS Code 1.33.1

Quokka 1.0.209

Ramda 0.26.1

Array.prototype.map()

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

let getBooks = arr => arr.map((x, i) => `${i}.${x.title}`);

console.dir(getBooks(data));

第 7 行

let getBooks = arr => arr.map((x, i) => `${i}.${x.title}`);

第二個參數 i 就是 index,可直接使用。

Ramda 之 addIndex()

addIndex()

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

let mapIndex = addIndex(map);
let getBooks = mapIndex((x, i) => `${i}.${x.title}`);

console.dir(getBooks(data));

第 8 行

let mapIndex = addIndex(map);

map() 必須經過 addIndex() 的包裝後,其 callback 才有 index 可用。

addIndex()

((a … → b) … → [a] → *) → ((a …, Int, [a] → b) … → [a] → *)

將 callback 加上 index

Ramda 之 addIndex()

Point-free

import { map, addIndex, useWith, concat, identity, prop, flip, pipe } from 'ramda';

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

let mapIndex = addIndex(map);
let title = pipe(prop('title'), concat('.'));
let index = pipe(identity, String);
let getBooks = mapIndex(useWith(
  flip(concat), [title, index])
);

console.dir(getBooks(data));

也可以將 callback 部分進一步 point-free。

這個 point-free 在 production code 就不建議使用,因為太複雜了,可讀性不高,僅適合拿來練習 point-free

Ramda 之 addIndex()

Conclusion

addIndex()

Reference

Ramda , map()

Ramda , addIndex()


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

The Everything Store

The Everything Store

Brad Stone / Little, Brown and Company / 2013-10-22 / USD 28.00

The definitive story of Amazon.com, one of the most successful companies in the world, and of its driven, brilliant founder, Jeff Bezos. Amazon.com started off delivering books through the mail. Bu......一起来看看 《The Everything Store》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具