国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ES6 換種思路處理數(shù)據(jù)

jindong / 3119人閱讀

摘要:看完本文,希望可以寫出更加漂亮簡(jiǎn)潔函數(shù)式的代碼可以用來匯總數(shù)據(jù)的初始值把一個(gè)對(duì)象數(shù)組變成一個(gè)以數(shù)組中各個(gè)對(duì)象的為屬性名,對(duì)象本身為屬性值的對(duì)象。

Handle javascript data structures with map/reduce

看完本文,希望可以寫出更加漂亮、簡(jiǎn)潔、函數(shù)式的代碼?

reduce

reduce 可以用來匯總數(shù)據(jù)

const customer = [
  {id: 1, count: 2},
  {id: 2, count: 89},
  {id: 3, count: 1}
];
const totalCount = customer.reduce((total, item) =>
  total + item.count,
  0 // total 的初始值
);
// now totalCount = 92

把一個(gè)對(duì)象數(shù)組變成一個(gè)以數(shù)組中各個(gè)對(duì)象的 id 為屬性名,對(duì)象本身為屬性值的對(duì)象。haoduoshipin

let products = [
  {
    id: "123",
    name: "蘋果"
  },
  {
    id: "345",
    name: "橘子"
  }
];

const productsById = products.reduce(
  (obj, product) => {
    obj[product.id] = product
    return obj
  },
  {}
);

console.log("result", productsById);
map

map 可以理解為是數(shù)組的轉(zhuǎn)換器,依次對(duì)數(shù)組中的每個(gè)元素做變換進(jìn)而得到一個(gè)新的數(shù)組。

const integers = [1, 2, 3, 4, 6, 7];
const twoXIntegers = integers.map(i => i*2);
// twoXIntegers are now [2, 4, 6, 8, 12, 14]
// integers數(shù)組并不會(huì)受到影響
find?

篩選出數(shù)組中的個(gè)別元素

const posts = [
  {id: 1, title: "Title 1"},
  {id: 2, title: "Title 2"},
];
// find the title of post whose id is 1
const title = posts.find(p => p.id === 1).title;

唉~ 使用了半年的 es6才發(fā)現(xiàn)有這么好用的東西,譯者傻缺還像下面這么寫過呢

const posts = [
  {id: 1, title: "Title 1"},
  {id: 2, title: "Title 2"},
];

const title = posts.filter(item => item.id === 1)[0].title;
filter

篩選出數(shù)組中某些符合條件的元素組成新的數(shù)組

const integers = [1, 2, 3, 4, 6, 7];
const evenIntegers = integers.filter(i => i % 2 === 0);
// evenIntegers are [2, 4, 6]

請(qǐng)大家自行思考下filterfind的區(qū)別

數(shù)組concat
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [6, 7, 8, 9, 0];
const arrTarget = [...arr1, ...arr2];
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
對(duì)象操作
function operation(query, option = {}) {
    const param = {...query, ...option};
    // ....
    return param;
}
let opt = {startTime: 123455555, endTime: 113345555};
let q = {name: "一步", age: "xxx"};
operation(q, opt);
// {name: "一步", age: "xxx", startTime: 123455555, endTime: 113345555}

對(duì)象是引用傳參的,所以函數(shù)內(nèi)部應(yīng)該盡可能的保證傳入的參數(shù)不受到污染。

為對(duì)象動(dòng)態(tài)地添加字段
const dynamicKey = "wearsSpectacles";
const user = {name: "Shivek Khurana"};
const updatedUser = {...user, [dynamicKey]: true};
// updatedUser is {name: "Shivek Khurana", wearsSpectacles: true}
將對(duì)象轉(zhuǎn)換為query字符串?
const params = {color: "red", minPrice: 8000, maxPrice: 10000};
const query = "?" + Object.keys(params)
  .map(k =>
    encodeURIComponent(k) + "=" + encodeURIComponent(params[k])
  )
  .join("&")
;
// encodeURIComponent encodes special characters like spaces, hashes
// query is now "color=red&minPrice=8000&maxPrice=10000"
得到對(duì)象數(shù)組的元素 index
const posts = [
  {id: 13, title: "Title 221"},
  {id: 5, title: "Title 102"},
  {id: 131, title: "Title 18"},
  {id: 55, title: "Title 234"}
];
// to find index of element with id 131
const requiredIndex = posts.map(p => p.id).indexOf(131);

更加優(yōu)雅的寫法呱呱呱提供:

const posts = [
  {id: 13, title: "Title 221"},
  {id: 5, title: "Title 102"},
  {id: 131, title: "Title 18"},
  {id: 55, title: "Title 234"}
];
const index = posts.findIndex(p => p.id === 131)
刪除對(duì)象的某個(gè)字段
const user = { name: "Shivek Khurana", age: 23, password: "SantaCl@use" };
const userWithoutPassword = Object.keys(user)
    .filter(key => key !== "password")
    .map(key => ({[key]: user[key]}))
    .reduce((accumulator, current) => ({ ...accumulator, ...current }), {});

這里我認(rèn)為原作者有點(diǎn)為了函數(shù)式編程而函數(shù)式了,下面是我的解決方案:

const user = {name: "Shivek Khurana", age: 23, password: "SantaCl@use"};
const newUser = {...user};
delete newUser.password;
// {name: "Shivek Khurana", age: 23}

更現(xiàn)代的寫法YiHzo提供: ?????

const user = {name: "Shivek Khurana", age: 23, password: "SantaCl@use"};
// 利用對(duì)象的解構(gòu),取出非password的所有字段
const {password, ...newUser} = user

以上代碼片段的共同原則:不改變?cè)瓟?shù)據(jù)。希望大家的代碼都可以盡可能的簡(jiǎn)潔,可維護(hù)?。

【開發(fā)環(huán)境推薦】Cloud Studio 是基于瀏覽器的集成式開發(fā)環(huán)境,支持絕大部分編程語言,包括 HTML5、PHP、Python、Java、Ruby、C/C++、.NET 小程序等等,無需下載安裝程序,一鍵切換開發(fā)環(huán)境。 Cloud Studio提供了完整的 Linux 環(huán)境,并且支持自定義域名指向,動(dòng)態(tài)計(jì)算資源調(diào)整,可以完成各種應(yīng)用的開發(fā)編譯與部署。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/107177.html

相關(guān)文章

  • 這一次,我們換種姿勢(shì)學(xué)習(xí) javascript

    摘要:操作符或調(diào)用函數(shù)時(shí)傳入?yún)?shù)的操作都會(huì)導(dǎo)致關(guān)聯(lián)作用域的賦值操作。此外可以使用和來設(shè)置對(duì)象及其屬性的不可變性級(jí)別。忽視這一點(diǎn)會(huì)導(dǎo)致許多問題。使用調(diào)用函數(shù)時(shí)會(huì)把新對(duì)象的屬性關(guān)聯(lián)到其他對(duì)象。 前言 《你不知道的 javascript》是一個(gè)前端學(xué)習(xí)必讀的系列,讓不求甚解的JavaScript開發(fā)者迎難而上,深入語言內(nèi)部,弄清楚JavaScript每一個(gè)零部件的用途。本書介紹了該系列的兩個(gè)主題:...

    zone 評(píng)論0 收藏0
  • Cookie就擺在那,為什么死活吃不到?

    摘要:查找原因無法獲取到是因?yàn)橥床呗院蜆?biāo)記的原因。在同一個(gè)站點(diǎn)下使用屬性是無效的。此外,這個(gè)指示也會(huì)被用做響應(yīng)中被忽視的標(biāo)示。而通過設(shè)置為獲得的第三方,將會(huì)依舊享受同源策略,因此不能被通過或者從頭部相應(yīng)請(qǐng)求的腳本等訪問。 作者:codexu _ showImg(https://segmentfault.com/img/remote/1460000020161476); 瀏覽器里明明存在的c...

    shmily 評(píng)論0 收藏0
  • 用面向?qū)ο蟮乃季S方式來設(shè)計(jì)數(shù)據(jù)庫(kù)

    摘要:思路上次換工作,面試遇到一道面試題,如下請(qǐng)?jiān)O(shè)計(jì)數(shù)據(jù)庫(kù),用來存放老師學(xué)生等人員的信息,盡量滿足以后的擴(kuò)展。 ————因?yàn)閼卸瑁运妓? 場(chǎng)景 我們有多種類型訂單:實(shí)物訂單、特享商戶訂單、核銷訂單、生活繳費(fèi)訂單、電影票訂單、機(jī)票訂單、以及以后會(huì)持續(xù)新增的未知類型訂單,它們都存放在不同的訂單類型表中 影響 導(dǎo)致有些業(yè)務(wù)做起來會(huì)比較痛苦 比如: 統(tǒng)計(jì)當(dāng)前用戶未付...

    alexnevsky 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<