亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

17個(gè)實(shí)用的JavaScript數(shù)組和對象的方法

rockswang / 2986人閱讀

摘要:原文作者譯者前段時(shí)間,我收聽了一個(gè)很棒的播客,其中總結(jié)了一些實(shí)用的數(shù)組和對象方法。通過使用這些數(shù)組和對象的方法,你不再需要和循環(huán)來獲得數(shù)組和對象中的數(shù)據(jù)。比如,顯示傳入的實(shí)參數(shù)組防止修改現(xiàn)有的對象屬性或者向?qū)ο筇砑有碌膶傩院椭怠?/p>

原文:Useful Javascript Array and Object Methods
作者:Robert Cooper
譯者:Jim Xiao

前段時(shí)間,我收聽了一個(gè)很棒的Syntax FM播客,其中總結(jié)了一些實(shí)用的JavaScript數(shù)組和對象方法。這些方法可以幫助開發(fā)人員編寫簡潔可讀的代碼,并且這些原生的JavaScript方法減少了對類似Lodash這樣第三方庫的依賴。

本文中所有提到的函數(shù)方法都是可以鏈?zhǔn)秸{(diào)用的,意味著它們可以相互結(jié)合地使用。更重要的是,它們并不會(huì)變更原始數(shù)據(jù),當(dāng)使用React時(shí),這點(diǎn)尤其重要。通過使用這些數(shù)組和對象的方法,你不再需要forwhile循環(huán)來獲得數(shù)組和對象中的數(shù)據(jù)。

下面每個(gè)函數(shù)都包含一個(gè)鏈接,可以跳轉(zhuǎn)到相對應(yīng)的中文mozilla developer network(MDN)的解釋頁面。

.filter()

創(chuàng)建一個(gè)新數(shù)組, 其包含通過所提供函數(shù)實(shí)現(xiàn)的測試的所有元素。

比如,創(chuàng)建一個(gè)學(xué)生年齡數(shù)組,該數(shù)組的值必須大于法定飲酒年齡:

const studentsAge = [17, 16, 18, 19, 21, 17];
const ableToDrink = studentsAge.filter( age => age > 18 );
// [19, 21]
.map()

創(chuàng)建一個(gè)新數(shù)組,其結(jié)果是該數(shù)組中的每個(gè)元素都調(diào)用一個(gè)提供的函數(shù)后返回的結(jié)果。該方法非常便于數(shù)據(jù)處理,而且在React代碼中??吹?,因?yàn)樗粫?huì)改變原始數(shù)組中的數(shù)據(jù)。

比如,創(chuàng)建一個(gè)數(shù)組,在每個(gè)數(shù)字的開頭添加一個(gè)$符號(hào):

const numbers = [2, 3, 4, 5];
const dollars = numbers.map( number => "$" + number);
// ["$2", "$3", "$4", "$5"]
.reduce()

這是一個(gè)經(jīng)常被忽略的方法。對累加器和數(shù)組中的每個(gè)元素(從左到右)應(yīng)用一個(gè)函數(shù),將其減少為單個(gè)值。該方法對于計(jì)算總數(shù)非常管用。返回值可以是任何類型(例如對象,數(shù)組,字符串,整數(shù))。

比如,對數(shù)組中的元素進(jìn)行加和運(yùn)算:

const numbers = [5, 10, 15];
const total = numbers.reduce( (accumulator, currentValue) => accumulator + currentValue);
// 30

在MDN的文檔中還有許多用到.reduce()方法的例子,比如展開數(shù)組,按屬性分組對象以及刪除數(shù)組中的重復(fù)項(xiàng)等。

.forEach()

對數(shù)組的每個(gè)元素執(zhí)行一次提供的函數(shù)。

比如,把數(shù)組中的每個(gè)元素打印到控制臺(tái):

const emotions = ["happy", "sad", "angry"];
emotions.forEach( emotion => console.log(emotion));
// "happy"
// "sad"
// "angry"
.some()

判斷數(shù)組中的某些元素是否通過由提供的函數(shù)實(shí)現(xiàn)的測試。一個(gè)很有用的實(shí)例就是檢查用戶的權(quán)限。它在有些時(shí)候與.forEach()類似,不同的是,當(dāng)測試數(shù)組中的每個(gè)元素的過程中,如果一個(gè)truthy值返回,就會(huì)立即終止該循環(huán)。

比如,檢查數(shù)組中是否至少有一個(gè)"admin"存在:

const userPrivileges = ["user", "user", "user", "admin"];
const containsAdmin = userPrivileges.some( element => element === "admin");
// true
.every()

檢查是否數(shù)組中的每個(gè)值都滿足條件。

比如,檢查數(shù)組中的評價(jià)是否都大于等于3顆星:

const ratings = [3, 5, 4, 3, 5];
const goodOverallRating = ratings.every( rating => rating >= 3 );
// true
.includes()

檢查是否一個(gè)數(shù)組包含一個(gè)確定的值。.some()相似,但它不是滿足某個(gè)條件,而是判斷是否該數(shù)列包含某個(gè)具體值。

比如,檢查是否數(shù)列包含一項(xiàng)名為"waldo"的字符串:

const names = ["sophie", "george", "waldo", "stephen", "henry"];
const includesWaldo = names.includes("waldo");
// true
Array.from()

這是一個(gè)可以從其他數(shù)組或者字符串中創(chuàng)造新array的方法。你也可以傳入一個(gè)回調(diào)函數(shù)作為參數(shù)來操作新數(shù)組的數(shù)據(jù)。

比如,通過一個(gè)字符串來創(chuàng)建數(shù)組:

const newArray = Array.from("hello");
// ["h", "e", "l", "l", "o"]

比如,創(chuàng)建一個(gè)數(shù)組,該數(shù)組的值是其他數(shù)組中每個(gè)項(xiàng)的值的兩倍:

const doubledValues = Array.from([2, 4, 6], number => number * 2);
// [4, 8, 12]
Objects.values()

返回一個(gè)由給定對象自己的所有可枚舉屬性值的數(shù)組。

比如,返回一個(gè)對象所有的屬性值:

const icecreamColors = {
    chocolate: "brown",
    vanilla: "white",
    strawberry: "red",
}

const colors = Object.values(icecreamColors);
// ["brown", "white", "red"]
Objects.keys()

返回一個(gè)由給定對象的自身可枚舉屬性組成的數(shù)組。

比如,返回一個(gè)對象所有的屬性名:

const icecreamColors = {
  chocolate: "brown",
  vanilla: "white",
  strawberry: "red",
}

const types = Object.keys(icecreamColors);
// ["chocolate", "vanilla", "strawberry"]
Object.entries()

返回一個(gè)由一個(gè)給定對象的鍵值對組成的數(shù)組。

比如,返回一個(gè)對象所有的鍵值對構(gòu)成的數(shù)組:

const weather = {
  rain: 0,
  temperature: 24,
  humidity: 33,
}

const entries = Object.entries(weather);
// [["rain", 0], ["temperature", 24], ["humidity", 33]]
Array spread

在數(shù)組中使用擴(kuò)展運(yùn)算符(…)可以展開數(shù)組中的元素。將多個(gè)數(shù)組合并成一個(gè)數(shù)組時(shí)非常有用。而且當(dāng)移除數(shù)組中的某個(gè)元素時(shí),我們也可以使用擴(kuò)展運(yùn)算符,而不需要常規(guī)的splice()方法,因?yàn)?b>splice()方法會(huì)修改原始數(shù)組中的數(shù)據(jù)。

比如,合并兩個(gè)數(shù)組:

const spreadableOne = [1, 2, 3, 4];
const spreadableTwo = [5, 6, 7, 8];

const combined = [...spreadableOne, ...spreadableTwo];
// [1, 2, 3, 4, 5, 6, 7, 8]

比如,移除數(shù)組中的元素而不改變原數(shù)組:

const animals = ["squirrel", "bear", "deer", "salmon", "rat"];
const mammals = [...animals.slice(0,3), ...animals.slice(4)];
// ["squirrel", "bear", "deer", "rat"]
Object spread

擴(kuò)展對象允許為一個(gè)沒有更改的對象添加新的屬性和方法(換句話說,創(chuàng)建了一個(gè)新對象)。對象擴(kuò)展符也可以把多個(gè)對象合并在一起。注意,該方法不適合嵌套對象的復(fù)制。

比如,為新對象添加屬性和值而并不影響原始的對象:

const spreadableObject = {
  name: "Robert",
  phone: "iPhone"
};

const newObject = {
  ...spreadableObject,
  carModel: "Volkswagen"
}
// { carModel: "Volkswagen", name: "Robert", phone: "iPhone" }
Function rest

函數(shù)可以使用剩余參數(shù)的語法來接受任意數(shù)量的實(shí)參。

比如,顯示傳入的實(shí)參數(shù)組:

function displayArgumentsArray(...theArguments) {
  console.log(theArguments);
}

displayArgumentsArray("hi", "there", "bud");
// ["hi", "there", "bud"]
Object.freeze()

防止修改現(xiàn)有的對象屬性或者向?qū)ο筇砑有碌膶傩院椭怠?/strong>通常認(rèn)為該功能跟const很像,但是,const可以允許修改對象中的屬性。

比如,凍結(jié)一個(gè)對象以防止更改其屬性:

const frozenObject = {
  name: "Robert"
}

Object.freeze(frozenObject);

frozenObject.name = "Henry";
// { name: "Robert" }
Object.seal()

停止將任何新屬性添加到對象,但仍允許更改現(xiàn)有屬性。

比如:密封對象以防止添加wearWatch屬性:

const sealedObject = {
  name: "Robert"
}

Object.seal(sealedObject);

sealedObject.name = "Bob";
sealedObject.wearsWatch = true;
// { name: "Bob" }
Object.assign()

允許將對象組合在一起。因?yàn)橛辛藢ο髷U(kuò)展的語法,Object.assign()的方法變得不那么重要。與對象擴(kuò)展符一樣,它也不能實(shí)現(xiàn)深拷貝。如果想實(shí)現(xiàn)對象的深拷貝,一個(gè)很好的方法是使用像Lodash這樣的第三方庫。

比如, 把兩個(gè)對象合并成一個(gè):

const firstObject = {
  firstName: "Robert"
}

const secondObject = {
  lastName: "Cooper"
}

const combinedObject = Object.assign(firstObject, secondObject);
// { firstName: "Robert", lastName: "Cooper" }

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/95492.html

相關(guān)文章

  • 45 個(gè)實(shí)用 JavaScript 技巧、竅門最佳實(shí)踐

    摘要:使用閉包實(shí)現(xiàn)私有變量譯者添加未在構(gòu)造函數(shù)中初始化的屬性在語句結(jié)尾處使用分號(hào)在語句結(jié)尾處使用分號(hào)是一個(gè)很好的實(shí)踐??偨Y(jié)我知道還有很多其他的技巧,竅門和最佳實(shí)踐,所以如果你有其他想要添加或者對我分享的這些有反饋或者糾正,請?jiān)谠u論中指出。 showImg(http://segmentfault.com/img/bVbJnR); 如你所知,JavaScript是世界上第一的編程語言(編者注:2...

    魏憲會(huì) 評論0 收藏0
  • 翻譯連載 | JavaScript輕量級(jí)函數(shù)式編程-第 8 章:列表操作 |《你不知道JS》姊妹篇

    摘要:通過對一系列任務(wù)建模來理解一些非常重要的函數(shù)式編程在列表操作中的價(jià)值一些些看起來不像列表的語句作為列表操作,而不是單獨(dú)執(zhí)行。映射我們將采用最基礎(chǔ)和最簡單的操作來開啟函數(shù)式編程列表操作的探索。函子是采用運(yùn)算函數(shù)有效用操作的值。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 關(guān)于譯者:這是一個(gè)流淌著...

    sPeng 評論0 收藏0
  • forEach、map、filter、find、sort、some等易錯(cuò)點(diǎn)整理

    摘要:最近手頭上做了一個(gè)很大的后臺(tái)管理項(xiàng)目,前端對復(fù)雜數(shù)據(jù)的處理要求頗高,也確實(shí)讓自己發(fā)現(xiàn)了很多之前被忽視的細(xì)節(jié)。鳴人佐助卡卡西佐助佐助佐助但是很遺憾及更早版本也不支持。 ??最近手頭上做了一個(gè)很大的后臺(tái)管理項(xiàng)目,前端對復(fù)雜數(shù)據(jù)的處理要求頗高,也確實(shí)讓自己發(fā)現(xiàn)了很多之前被忽視的細(xì)節(jié)。在此特整理出來,希望不熟悉的朋友們們以后可以繞開我踩的這些坑。本文初衷在于幫助大家梳理一些數(shù)組操作上的重點(diǎn)和易...

    AJie 評論0 收藏0
  • JavaScript」Array方法詳細(xì)總結(jié)及常用數(shù)組操作(附完整示例)

    摘要:數(shù)組索引只是具有整數(shù)名稱的枚舉屬性,并且與通用對象屬性相同。利用的解構(gòu)賦值解構(gòu)賦值尾遞歸優(yōu)化遞歸非常耗內(nèi)存,因?yàn)樾枰瑫r(shí)保存成千上百個(gè)調(diào)用幀,很容易發(fā)生棧溢出。而尾遞歸的實(shí)現(xiàn),往往需要改寫遞歸函數(shù),確保最后一步只調(diào)用自身。 一.前言 因?yàn)樵诠ぷ鳟?dāng)中,經(jīng)常使用到j(luò)s的數(shù)組,而其中對數(shù)組方法的使用也是很頻繁的,所以總是會(huì)有弄混或者概念不夠清晰的狀況,所以,寫下這篇文章整理一番,本文有對幾乎...

    Alfred 評論0 收藏0
  • 7個(gè)javascript實(shí)用小技巧

    摘要:每種編程語言都有一些黑魔法或者說小技巧,也不例外,大部分是借助或者瀏覽器新特性實(shí)現(xiàn)。下面介紹的個(gè)實(shí)用小技巧,相信其中有些你一定用過。當(dāng)然不管語言如何變化,我們總能在編程中總結(jié)一些小技巧來精簡代碼。 showImg(https://segmentfault.com/img/remote/1460000018902642); 每種編程語言都有一些黑魔法或者說小技巧,JS也不例外,大部分是借...

    tinysun1234 評論0 收藏0

發(fā)表評論

0條評論

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