使用 toPairs() 將 Object 轉成 Pair Array

實務上為了精簡,API 有時會將一對資料以 Object 形式傳遞,但處理上 Array 還是比 Object 方便,Ramda 提供了 toPairs() 將 Object 轉成 Pair Array。

Version

macOS Mojave 10.14.5

VS Code 1.36.0

Quokka 1.0.233

Ramda 0.26.1

Imperative

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

// toPairs :: {k, v} => [[k, v]]
let toPairs = obj => {
  let result = [];

  for(let key in obj) {
    result.push([key, obj[key]]);
  }

  return result;
};

console.dir(toPairs(data));

data 為 object,其中 key 為 title ,而 value 為 price ,欲將 titlevalue 合併為 pair 成為 pair array。

Imperative 會使用 for in loop 跑遍所有 property,並以 obj[key] 取得 value,最後以 [key, obj[key]] 重新組成 pair。

Functional

import { converge, zip, keys, values } from 'ramda';

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

// toPairs :: {k, v} => [[k, v]]
let toPairs = converge(
  zip, [keys, values]
);

console.dir(toPairs(data));

若以 functional 角度思考:

keys()
values()
zip()

最後以 converge() 整合所有流程,非常清楚。

Ramda

import { toPairs } from 'ramda';

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

console.dir(toPairs(data));

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

toPairs()

{k, v} => [[k, v]]

將 object 轉成 pair array

{k, v} :data 為 object

[[k, v]] :將每個 key / value 轉成 pair,以 pair array 回傳

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章