您應該知道的13個有用的JavaScript數(shù)組技巧和竅門

您應該知道的13個有用的JavaScript數(shù)組技巧和竅門
翻譯:范小飯

數(shù)組是Javascript最常見的概念之一繁疤,它為我們提供了處理存儲在其中的數(shù)據(jù)的許多可能性。數(shù)組是Javascript中最基本的主題之一宿稀,你可能在編程開始之初就了解它趁舀,在這篇文章中,我會給你分享一些你可能不知道但是很有用的技巧祝沸,讓我們開始吧矮烹。

1、移除數(shù)組重復項

這是一個非常常見的數(shù)組面試問題罩锐,如何在數(shù)組中提取重復的值奉狈,你可以用new set()達到這個目的,我也愿意分享其兩種的方式涩惑,一個是.from()方法另一個是擴展運算符(...)

var fruits = [“banana”, “apple”, “orange”, “watermelon”, “apple”, “orange”, “grape”, “apple”];


// First method
var uniqueFruits = Array.from(new Set(fruits));
console.log(uniqueFruits); // returns [“banana”, “apple”, “orange”, “watermelon”, “grape”]
// Second method
var uniqueFruits2 = […new Set(fruits)];
console.log(uniqueFruits2); // returns [“banana”, “apple”, “orange”, “watermelon”, “grape”]

很簡單仁期,對吧?

2、替換數(shù)組中的具體值

有時寫代碼的時候跛蛋,會遇到需要替換數(shù)組中的某些具體值熬的,這有一個你以前也許不知道的又好又簡短的方法,我們可以用splice(開始位置赊级,需要移除的值押框,需要添加的值),傳遞這三個參數(shù)指定我們在哪里修改理逊,我們需要更改多個少個值橡伞,以及新的值。

var fruits = [“banana”, “apple”, “orange”, “watermelon”, “apple”, “orange”, “grape”, “apple”];
fruits.splice(0, 2, “potato”, “tomato”);
console.log(fruits); // returns [“potato”, “tomato”, “orange”, “watermelon”, “apple”, “orange”, “grape”, “apple”]

3晋被、沒有.map()的map數(shù)組
可能每個人都知道數(shù)組的map()方法兑徘,但是這有另一個不同的方式用更簡單的代碼實現(xiàn)相同的效果。我們可以用from()方法達到這個目的羡洛。

var friends = [
    { name: ‘John’, age: 22 },
    { name: ‘Peter’, age: 23 },
    { name: ‘Mark’, age: 24 },
    { name: ‘Maria’, age: 22 },
    { name: ‘Monica’, age: 21 },
    { name: ‘Martha’, age: 19 },
]


var friendsNames = Array.from(friends, ({name}) => name);
console.log(friendsNames); // returns [“John”, “Peter”, “Mark”, “Maria”, “Monica”, “Martha”]

4挂脑、空數(shù)組
你是否有一個包含很多元素的數(shù)組,但是出于某些原因需要對其進行清理翘县,并且您不想一個一個地刪除最域?只需一行代碼即可完成操作。清空一個數(shù)組锈麸,你只需要設置數(shù)組的長度是0镀脂,就這樣。

var fruits = [“banana”, “apple”, “orange”, “watermelon”, “apple”, “orange”, “grape”, “apple”];


fruits.length = 0;
console.log(fruits); // returns []

5忘伞、數(shù)組轉成對象
在某些情況下薄翅,我們經常需要把數(shù)組轉成對象,把數(shù)組轉成對象的一個最快的方式就是用熟知的擴展運算符氓奈。

var fruits = [“banana”, “apple”, “orange”, “watermelon”];
var fruitsObj = { …fruits };
console.log(fruitsObj); // returns {0: “banana”, 1: “apple”, 2: “orange”, 3: “watermelon”, 4: “apple”, 5: “orange”, 6: “grape”, 7: “apple”}

6翘魄、快速創(chuàng)建一個有數(shù)據(jù)的數(shù)組

有時我們創(chuàng)建一個數(shù)組,并且需要用同樣的數(shù)據(jù)填充舀奶,這種情況下暑竟,我們可以用fill()方法,簡單又簡潔育勺。

var newArray = new Array(10).fill(“1”);
console.log(newArray); // returns [“1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”]

7但荤、合并數(shù)組
你知道怎么不用concat()方法來合并數(shù)組嗎?這有一個簡單的方法用一行代碼就可以合并多個數(shù)組涧至,在這種情況下腹躁,可能你已經意識到擴展運算符非常有用

var fruits = [“apple”, “banana”, “orange”];
var meat = [“poultry”, “beef”, “fish”];
var vegetables = [“potato”, “tomato”, “cucumber”];
var food = […fruits, …meat, …vegetables];
console.log(food); // [“apple”, “banana”, “orange”, “poultry”, “beef”, “fish”, “potato”, “tomato”, “cucumber”]

8、找到兩個數(shù)組的交集
這也是在面試中都可能面臨的最普遍的問題之一南蓬,因為它表明了你是否能夠使用數(shù)組方法以及你的邏輯纺非。找到兩個數(shù)組的交集哑了,我們將用文章前面講到過得方法,為了確保數(shù)組中的值沒有重復的烧颖,將使用filter()方法和includes()最后弱左,我們將得到兩個數(shù)組都存在的值,code如下:

var numOne = [0, 2, 4, 6, 8, 8];
var numTwo = [1, 2, 3, 4, 5, 6];
var duplicatedValues = […new Set(numOne)].filter(item => numTwo.includes(item));
console.log(duplicatedValues); // returns [2, 4, 6]

9炕淮、從數(shù)組中刪除false
一開始科贬,我們定義了false,在JavaScript中鳖悠,fasle值有false,0优妙,null乘综,NaN,undefined套硼,現(xiàn)在我們如何從數(shù)組中移除這些false值卡辰,為了實現(xiàn)這個目的,我們可以用filter()方法

var mixedArr = [0, “blue”, “”, NaN, 9, true, undefined, “white”, false];
var trueArr = mixedArr.filter(Boolean);
console.log(trueArr); // returns [“blue”, 9, true, “white”]

10邪意、從數(shù)組中獲取隨機值
有時我們需要從數(shù)組中隨機提取值九妈,為了創(chuàng)造一個簡單的,有效的雾鬼,最簡短的并且保持代碼干凈萌朱,我們可以根據(jù)數(shù)組的長度得到一個隨機數(shù),可以如下:

var colors = [“blue”, “white”, “green”, “navy”, “pink”, “purple”, “orange”, “yellow”, “black”, “brown”];
var randomColor = colors[(Math.floor(Math.random() * (colors.length)))]

11策菜、倒置數(shù)組
當我們需要倒置數(shù)組晶疼,不需要通過寫復雜的循環(huán)和方法,有一種簡單的又憨,只需要一行代碼的翠霍,數(shù)組方法已經為我們把數(shù)組倒置了,讓我們檢查下:

var colors = [“blue”, “white”, “green”, “navy”, “pink”, “purple”, “orange”, “yellow”, “black”, “brown”];
var reversedColors = colors.reverse();
console.log(reversedColors); // returns [“brown”, “black”, “yellow”, “orange”, “purple”, “pink”, “navy”, “green”, “white”, “blue”]

12蠢莺、.lastIndexOf()
在JavaScript中寒匙,有一個有趣的方法能夠允許找到給定元素最后一次出現(xiàn)的下標,例如躏将, 如果我們的數(shù)組中有重復的值锄弱,我們可以找到他最后一次出現(xiàn)的下標,看下代碼:

var nums = [1, 5, 2, 6, 3, 5, 2, 3, 6, 5, 2, 7];
var lastIndex = nums.lastIndexOf(5);
console.log(lastIndex); // returns 9

13耸携、求數(shù)組中所有值得和
另一個在JavaScript工程師面試時經常會被問到的問題棵癣。沒有什么可怕的,用reduce()夺衍,一行代碼就可以解決狈谊。如下:

var nums = [1, 5, 2, 6];
var sum = nums.reduce((x, y) => x + y);
console.log(sum); // returns 14

結論

在這篇文章中,我列出了13個,可以幫助你codeing 并且保持代碼簡短干凈的技巧和竅門河劝,另外壁榕,請記住,您可能需要在Javascript中使用許多不同的技巧赎瞎,以進行探索牌里,不僅涉及數(shù)組,而且涉及不同的數(shù)據(jù)類型务甥。我希望你能喜歡本文中提供的解決方案牡辽,并且你可以用他們提升你的發(fā)開效率。

Have a nice coding!

tricks:竅門
duplicates:重復的
extract:提取
unique:獨特敞临,第一無二
solution:n,解決方式
modification:修改
convert:改造
intersection:馬路口态辛,交集

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挺尿,隨后出現(xiàn)的幾起案子奏黑,更是在濱河造成了極大的恐慌,老刑警劉巖编矾,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熟史,死亡現(xiàn)場離奇詭異,居然都是意外死亡窄俏,警方通過查閱死者的電腦和手機蹂匹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凹蜈,“玉大人怒详,你說我怎么就攤上這事∽偾” “怎么了昆烁?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缎岗。 經常有香客問我静尼,道長,這世上最難降的妖魔是什么传泊? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任鼠渺,我火速辦了婚禮,結果婚禮上眷细,老公的妹妹穿的比我還像新娘拦盹。我一直安慰自己,他們只是感情好溪椎,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布普舆。 她就那樣靜靜地躺著恬口,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沼侣。 梳的紋絲不亂的頭發(fā)上祖能,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音蛾洛,去河邊找鬼养铸。 笑死,一個胖子當著我的面吹牛轧膘,可吹牛的內容都是我干的钞螟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谎碍,長吁一口氣:“原來是場噩夢啊……” “哼筛圆!你這毒婦竟也來了?” 一聲冷哼從身側響起椿浓,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闽晦,沒想到半個月后扳碍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡仙蛉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年笋敞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荠瘪。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡夯巷,死狀恐怖,靈堂內的尸體忽然破棺而出哀墓,到底是詐尸還是另有隱情趁餐,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布篮绰,位于F島的核電站后雷,受9級特大地震影響,放射性物質發(fā)生泄漏吠各。R本人自食惡果不足惜臀突,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贾漏。 院中可真熱鬧候学,春花似錦、人聲如沸纵散。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至边翁,卻和暖如春翎承,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背符匾。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工叨咖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人啊胶。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓甸各,卻偏偏與公主長得像,于是被迫代替她去往敵國和親焰坪。 傳聞我的和親對象是個殘疾皇子趣倾,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容