使用 keys() 將 Object 轉成 Array

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

内容简介:對於前端而言 Array 比較好用,適合 HTML Template 做VS Code 1.35.1Quokka 1.0.227

對於前端而言 Array 比較好用,適合 HTML Template 做 v-for ,但有時 API 回傳是 Object,不方便使用,此時前端就得自己轉成 Array。Ramda 的 key() 提供將 Object 的 Key 轉成 Array。

Version

VS Code 1.35.1

Quokka 1.0.227

Ramda 0.26.1

Imperative

let data = {
  001: 100,
  002: 200,
  003: 300,
};

let lut = {
  001: 'FP in JavaScript',
  002: 'RxJS in Action',
  003: 'Speaking JavaScript'
};

// fn :: {a} -> {b} -> {c}
let fn = lut => obj => {
  let result = [];

  for(let x in obj) {
    result.push({
      title: lut[x],
      price: obj[x]
    })
  }

  return result;
};

console.dir(fn(lut)(data));

第 1 行

let data = {
  001: 100,
  002: 200,
  003: 300,
};

實際 data 為 object,不是 array,key 部分為 ID ,value 部分為 price

第 7 行

let lut = {
  001: 'FP in JavaScript',
  002: 'RxJS in Action',
  003: 'Speaking JavaScript'
};

IDtitle 的 lookup table,也是 object。

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

我們希望結果為 array,其 element 為 object,且根據 lut 顯示對應的 titleprice

13 行

// fn :: {a} -> {b} -> {c}
let fn = lut => obj => {
  let result = [];

  for(let x in obj) {
    result.push({
      title: lut[x],
      price: obj[x]
    })
  }

  return result;
};

由於結果為 array,imperative 會先建立 result array,使用 for in loop 讀取所有 obj 的 property,重新建立 object push 進 result array。

使用 keys() 將 Object 轉成 Array

Functional

import { pipe, keys, map } from 'ramda';

let data = {
  001: 100,
  002: 200,
  003: 300,
};

let lut = {
  001: 'FP in JavaScript',
  002: 'RxJS in Action',
  003: 'Speaking JavaScript'
};

// fn :: {a} -> {b} -> {c}
let fn = lut => obj => pipe(
  keys,
  map(x => ({ title: lut[x], price: obj[x] })),
)(obj);

console.dir(fn(lut)(data));

以 Functional 角度思考:

keys()
map()

使用 keys() 將 Object 轉成 Array

Point-free

import { pipe, keys, map, applySpec, prop, __ } from 'ramda';

let data = {
  001: 100,
  002: 200,
  003: 300,
};

let lut = {
  001: 'FP in JavaScript',
  002: 'RxJS in Action',
  003: 'Speaking JavaScript'
};

// fn :: {a} -> {b} -> {c}
let fn = lut => obj => pipe(
  keys,
  map(applySpec({
    title: prop(__, lut),  
    price: prop(__, obj)
  }))
)(obj);

console.dir(fn(lut)(data));

map() 的 callback 可使用 applySpec() 使其 point-free。

使用 keys() 將 Object 轉成 Array

Conclusion

  • 當 data 為 object,而我們期望為 array 時,可先用 keys() 轉成 array,再用 map() 轉成我們要的格式

Reference

Ramda , keys()

Ramda , pipe()

Ramda , map()

Ramda , applySpec()

Ramda , prop()

Ramda , __()


以上所述就是小编给大家介绍的《使用 keys() 將 Object 轉成 Array》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

网络是怎样连接的

网络是怎样连接的

[日]户根勤 / 周自恒 / 人民邮电出版社 / 2017-1-1 / CNY 49.00

本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。目的是帮助读者理解网络的本质意义,理解实际的设备和软件,进而熟练运用网络技术。同时,专设了“网络术语其实很简单”专栏,以对话的形式介绍了一些网络术语的词源,颇为生动有趣。 本书图文并茂,通俗易懂,非常适合计算机、网络爱好者及相关从......一起来看看 《网络是怎样连接的》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具