Ramda Cookbook 之 pickIndexes()
栏目: JavaScript · 发布时间: 6年前
内容简介:若我們想從 Array 得到幾個特定 Index 的 Element 時,該如何實現呢 ?VS Code 1.33.0
Ramda Cookbook 是學習 Ramda 很好的地方,除了都是很實用的 function 外,還可以學到更進階的 Ramda 技巧。
若我們想從 Array 得到幾個特定 Index 的 Element 時,該如何實現呢 ?
Version
VS Code 1.33.0
Quokka 1.0.205
Ramda 0.26.1
pickIndexes()
import { compose, values, pickAll } from 'ramda';
let data = [
{ title: 'FP in JavaScript', price: 100 },
{ title: 'RxJS in Action', price: 200 },
{ title: 'Speaking JavaScript', price: 300 }
];
let pickIndexes = compose(values, pickAll);
console.dir(pickIndexes([0, 2], data));
我們只想得到 array 的第 0 筆與第 2 筆,因此傳進 [0, 2] 給 pickIndexes() ,只要組合 values() 與 pickAll() 即可。
pickAll()
[k] -> {k: v} -> {k: v}
與 pick() 功能相同,唯若 property 不存在,則顯示 undefined
pickAll() 的第二個參數明明是 object,為什麼傳入 array 也可以呢 ? 難道 Ramda 官網寫錯了 ?
import _curry2 from './internal/_curry2';
var pickAll = _curry2(function pickAll(names, obj) {
var result = {};
var idx = 0;
var len = names.length;
while (idx < len) {
var name = names[idx];
result[name] = obj[name];
idx += 1;
}
return result;
});
export default pickAll;
若去研究 pickAll() 的 source code,會發現一個很有趣的地方。
第 9 行
result[name] = obj[name];
obj[name] 的 obj 若是 object,則相當於 obj.name ;若 obj 是 array, name 為 index,則相當於取出該 index 的 element。
因為 ECMAScript 的 array 與 object 都共用 [] 語法,根據這個特殊的語言特性,原作者借用 pickAll() 傳入 index 的 array,回傳只有指定的 index 的 object,然後再使用 values() 轉成 array。
import { compose, values, pickAll } from 'ramda';
let data = {
0: { title: 'FP in JavaScript', price: 100 },
1: { title: 'RxJS in Action', price: 200 },
2: { title: 'Speaking JavaScript', price: 300 }
};
let pickIndexes = compose(values, pickAll);
console.dir(pickIndexes([0, 2], data));
或者從另外一個角度,將 array 改用 object 表示,property 的 key 就是 index,如此就符合 pickAll() 的要求,data 是 object,會發現 pickIndexes() 結果不變。
Conclusion
- 因為 object 與 array 都共用
[],使得原本該傳入 object 的 function,也可以傳入 array,也因為 ECMAScript 的 dynamic language 特性,這使得pickAll()出現 Ramda 官方文件沒寫的用法 - 從另外一個角度,array 其實也是另外一個形式的 object,其 key 為 index,value 則是 array 的 element
Reference
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Pro Django
Marty Alchin / Apress / 2008-11-24 / USD 49.99
Django is the leading Python web application development framework. Learn how to leverage the Django web framework to its full potential in this advanced tutorial and reference. Endorsed by Django, Pr......一起来看看 《Pro Django》 这本书的介绍吧!