成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript30秒, 從入門到放棄

TNFE / 3459人閱讀

摘要:三元運算符遍歷過程中判斷遍歷數(shù)組值是否嚴格等于指定值,是,次數(shù)否,。三元運算符判斷是否是一個數(shù)組,是,返回遞歸運用后的值否,直接返回。秒,從入門到放棄博客地址秒,從入門到放棄微信公眾號地址秒,從入門到放棄

有意思

最近很火的github上的庫30-seconds-of-code,特別有意思,代碼也很優(yōu)雅。

能學es6

自己翻譯,能學英語

代碼很美,很優(yōu)雅,美即正義

函數(shù)式表達,享受

arrayGcd

Calculates the greatest common denominator (gcd) of an array of numbers.

Use Array.reduce() and the gcd formula (uses recursion) to calculate the greatest common denominator of an array of numbers.

const arrayGcd = arr =>{
  const gcd = (x, y) => !y ? x : gcd(y, x % y);
  return arr.reduce((a,b) => gcd(a,b));
}
// arrayGcd([1,2,3,4,5]) -> 1
// arrayGcd([4,8,12]) -> 4

計算數(shù)組的最大公約數(shù)。

使用Array.reduce()gcd公式(使用遞歸)來計算一個數(shù)組的最大公約數(shù)。

?  code cat arrayGcd.js
const arrayGcd = arr => {
    const gcd = (x, y) => !y ? x : gcd(y, x % y);
    return arr.reduce((a, b) => gcd(a, b));
}

console.log(arrayGcd([1, 2, 3, 4, 5]));
console.log(arrayGcd([4, 8, 12]));
?  code node arrayGcd.js
1
4

gcd即歐幾里德算法,具體不表,自查。這里用到了數(shù)組的reduce方法,相當簡潔,reduce不太了解的話,看下mdn就明白。

arrayLcm

Calculates the lowest common multiple (lcm) of an array of numbers.

Use Array.reduce() and the lcm formula (uses recursion) to calculate the lowest common multiple of an array of numbers.

const arrayLcm = arr =>{
 const gcd = (x, y) => !y ? x : gcd(y, x % y);
 const lcm = (x, y) => (x*y)/gcd(x, y) 
 return arr.reduce((a,b) => lcm(a,b));
}
// arrayLcm([1,2,3,4,5]) -> 60
// arrayLcm([4,8,12]) -> 24

計算一個數(shù)組的最小公倍數(shù)。

使用Array.reduce()lcm公式(使用遞歸)來計算一個數(shù)組的最大公約數(shù)。

?  code cat arrayLcm.js
const arrayLcm = arr => {
  const gcd = (x, y) => (!y ? x : gcd(y, x % y));
  const lcm = (x, y) => x * y / gcd(x, y);
  return arr.reduce((a, b) => lcm(a, b));
};

console.log(arrayLcm([1, 2, 3, 4, 5]));
console.log(arrayLcm([4, 8, 12]));
?  code node arrayLcm.js
60
24

lcm算法用到了前面的gcd算法,關(guān)鍵點是兩個數(shù)的最大公約數(shù)和最小公倍數(shù)的乘積正好就是這兩個數(shù)的乘積。

arrayMax

Returns the maximum value in an array.

Use Math.max() combined with the spread operator (...) to get the maximum value in the array.

const arrayMax = arr => Math.max(...arr);
// arrayMax([10, 1, 5]) -> 10

返回數(shù)組中最大的值。

使用Math.max()ES6的擴展運算符返回數(shù)組中最大的值。

?  code cat arrayMax.js
const arrayMax = arr => Math.max(...arr);

console.log(arrayMax([10, 1, 5]));
?  code node arrayMax.js
10

實際上就是Math.max()干的事,沒啥可說的了。

arrayMin

Returns the minimum value in an array.

Use Math.min() combined with the spread operator (...) to get the minimum value in the array.

const arrayMin = arr => Math.min(...arr);
// arrayMin([10, 1, 5]) -> 1

返回數(shù)組中最小的值。

使用Math.min()ES6的擴展運算符返回數(shù)組中最小的值。

?  code cat arrayMin.js
const arrayMin = arr => Math.min(...arr);

console.log(arrayMin([10, 1, 5]));
?  code node arrayMin.js
1

實際上就是Math.min()干的事,沒啥可說的了。

chunk

Chunks an array into smaller arrays of a specified size.

Use Array.from() to create a new array, that fits the number of chunks that will be produced. Use Array.slice() to map each element of the new array to a chunk the length of size. If the original array can"t be split evenly, the final chunk will contain the remaining elements.

const chunk = (arr, size) =>
 Array.from({length: Math.ceil(arr.length / size)}, (v, i) => arr.slice(i * size, i * size + size));
// chunk([1,2,3,4,5], 2) -> [[1,2],[3,4],[5]]

按照給定的size將一個數(shù)組切分成含有size個數(shù)的更小數(shù)組塊的數(shù)組。

使用Array.from()生產(chǎn)新的符合定義的數(shù)組。使用Array.slice()來截取指定size個元素組成新的數(shù)組塊。如果原數(shù)組長度不能被size整除,最后的剩余的那些元素將歸屬于最后一個塊。

?  code cat chunk.js
const chunk = (arr, size) =>
  Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>
    arr.slice(i * size, i * size + size)
  );

console.log(chunk([1, 2, 3, 4, 5], 2));
?  code node chunk.js
[ [ 1, 2 ], [ 3, 4 ], [ 5 ] ]

Array.from(arrayLike, mapFn, thisArg)這個方法呢,第一個參數(shù)是一個類數(shù)組或者可迭代的對象,第二個參數(shù)是一個應用在每一個數(shù)組元素上的方法,第三個參數(shù)就是改變this的指向了。通俗說就是指定誰是你的爸爸。

這里用了一個{ length: Math.ceil(arr.length / size) }迭代對象,length指定了迭代次數(shù),即按照size分塊后的數(shù)組長度,正好就是原數(shù)組長度除以size向上取整的值。向上取整就是為了滿足不能完全整除的情況。比如5個元素按照2個一組進行分塊,分了兩組兩個元素的,剩最后一個元素成了獨立組,總長為3。

(v, i),由于迭代的時候數(shù)組在每一個位置上都是以undefined初始化的,所以v一直都是undefined

arr.slice(i * size, i * size + size)迭代過程中每次截取size個數(shù)的元素組成新數(shù)組。這里的i就是隨著迭代變化,比如length是3,i就是0,1,2。

這里的迭代類似python里的range

?  code python
Python 3.6.4 (default, Dec 23 2017, 10:37:40)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> arr = [1,2,3,4,5]
>>> size = 2
>>> for i in range(math.ceil(len(arr) / size)):
...     print("index: ", i)
...
index:  0
index:  1
index:  2
compact

Removes falsey values from an array.

Use Array.filter() to filter out falsey values (false, null, 0, "", undefined, and NaN).

const compact = arr => arr.filter(Boolean);
// compact([0, 1, false, 2, "", 3, "a", "e"*23, NaN, "s", 34]) -> [ 1, 2, 3, "a", "s", 34 ]

移除掉數(shù)組里falsey的元素。(這個falsey不太好翻譯,不是錯誤的意思,而是該值布爾運算值為false的意思,我個人常用!!進行判斷)。

使用Array.filter()falsenull、0、""、undefinedNaN這些falsey過濾掉。

?  code cat compact.js
const compact = arr => arr.filter(Boolean);

console.log(compact([0, 1, false, 2, "", 3, "a", "e" * 23, NaN, "s", 34]));
?  code node compact.js
[ 1, 2, 3, "a", "s", 34 ]

Array.prototype.filter()干的,沒啥好說。

countOccurrences

Counts the occurrences of a value in an array.

Use Array.reduce() to increment a counter each time you encounter the specific value inside the array.

const countOccurrences = (arr, value) => arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0);
// countOccurrences([1,1,2,1,2,3], 1) -> 3

統(tǒng)計一個元素在一個數(shù)組中出現(xiàn)的次數(shù)。

使用Array.reduce()在遍歷過程中如果指定元素在數(shù)組中出現(xiàn),則增加它的次數(shù)值,默認次數(shù)為0。

?  code cat countOccurrences.js
const countOccurrences = (arr, value) =>
  arr.reduce((a, v) => (v === value ? a + 1 : a + 0), 0);

console.log(countOccurrences([1, 1, 2, 1, 2, 3], 1));
console.log(countOccurrences([1, 1, 2, 1, 2, 3], 5));
?  code node countOccurrences.js
3
0

三元運算符(v === value ? a + 1 : a + 0)遍歷過程中判斷遍歷數(shù)組值v是否嚴格等于指定值value,是,次數(shù)a+1;否,a+0

最后的一個逗號后面的0,是這個初始值,即a=0,這個懂reduce方法都知道,特別指出是,因為這個函數(shù)一定會有返回值,如果指定元素沒有在數(shù)組中出現(xiàn)一次,返回值是0,所以必須得初始化為0。

deepFlatten

Deep flattens an array.

Use recursion. Use Array.concat() with an empty array ([]) and the spread operator (...) to flatten an array. Recursively flatten each element that is an array.

const deepFlatten = arr => [].concat(...arr.map(v => Array.isArray(v) ? deepFlatten(v) : v));
// deepFlatten([1,[2],[[3],4],5]) -> [1,2,3,4,5]

深度攤平一個數(shù)組。

使用遞歸方法。結(jié)合Array.concat()、空數(shù)組[]ES6的擴展運算符來攤平一個數(shù)組,如果攤平的元素還是一個數(shù)組,就再遞歸運用該方法。

?  code cat deepFlatten.js
const deepFlatten = arr =>
  [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v)));

console.log(deepFlatten([1, [2], [[3], 4], 5]));
?  code node deepFlatten.js
[ 1, 2, 3, 4, 5 ]

三元運算符(Array.isArray(v) ? deepFlatten(v) : v)判斷v是否是一個數(shù)組,是,返回遞歸運用deepFlatten(v)后的值;否,直接返回v。

[].concat(...arr.map(fn))用空數(shù)組把map運算產(chǎn)生的數(shù)組進行擴展運算值拼接成結(jié)果數(shù)組返回。

該方法是深度攤平方法,在很多時候還有特定的攤平一層的需求,underscore就有。實現(xiàn)的方法就是再加一個標志參數(shù)進行處理即可。具體不講了。

應該會寫一個系列,今天先寫到這,明天繼續(xù)。

個人翻譯水平有限,歡迎大家在issues上批評指正。JavaScript30秒, 從入門到放棄
博客地址:JavaScript30秒, 從入門到放棄
微信公眾號地址:JavaScript30秒, 從入門到放棄

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

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

相關(guān)文章

  • JavaScript30入門放棄之Array(二)

    摘要:循環(huán)一個數(shù)組,使用每次去刪除該數(shù)組的第一個元素直到指定方法運算結(jié)果為,返回的是剩余元素組成的數(shù)組。直到循環(huán)退出,返回此時的。對應就是,包含下界,不包含上屆。秒,從入門到放棄之二微信公眾號秒,從入門到放棄之二 difference Returns the difference between two arrays. Create a Set from b, then use Array...

    pinecone 評論0 收藏0
  • JavaScript30, 入門放棄之Array(五)

    摘要:原文地址秒,從入門到放棄之五博客地址秒,從入門到放棄之五水平有限,歡迎批評指正從給定的數(shù)組中隨機選出指定個數(shù)的數(shù)組元素。否則判斷數(shù)組元素是否大于或者等于指定元素,尋找過程與前邊類似。 原文地址:JavaScript30秒, 從入門到放棄之Array(五)博客地址:JavaScript30秒, 從入門到放棄之Array(五) 水平有限,歡迎批評指正 sampleSize Gets n...

    dunizb 評論0 收藏0
  • JavaScript30, 入門放棄之Array(三)

    摘要:否則,直接循環(huán)去拼接該值返回按照指定的方法對數(shù)組元素進行分組歸類。使用創(chuàng)建一個對象,對象的鍵是生成的結(jié)果,值是符合該鍵的所有數(shù)組元素組成的數(shù)組。微信公眾號秒,從入門到放棄之三 原文鏈接:JavaScript30秒, 從入門到放棄之Array(三)水平有限,歡迎批評指正 flattenDepth Flattens an array up to the specified depth....

    FrancisSoung 評論0 收藏0
  • JavaScript30, 入門放棄之Array(六)

    摘要:從數(shù)組索引為開始刪除元素,直到對數(shù)組元素運用指定方法為為止。對兩個數(shù)組的元素分別調(diào)用指定方法后,返回以運行結(jié)果為判定基準的并集,并集是原始數(shù)組元素的并集而不是運行結(jié)果的并集。 原文地址:JavaScript30秒, 從入門到放棄之Array(六)博客地址:JavaScript30秒, 從入門到放棄之Array(六) 水平有限,歡迎批評指正 tail Returns all elem...

    Freeman 評論0 收藏0
  • JavaScript30, 入門放棄之Array(七)

    摘要:地址秒,從入門到放棄之七博客地址秒,從入門到放棄之七水平有限,歡迎批評指正剔除掉數(shù)組中所有存在于所指定的元素們的項。使用,和來創(chuàng)建由兩個數(shù)組元素拼接而成的所有可能對并將它們存在一個數(shù)組中的數(shù)組。 GitHub地址:JavaScript30秒, 從入門到放棄之Array(七)博客地址:JavaScript30秒, 從入門到放棄之Array(七) 水平有限,歡迎批評指正 without ...

    Cciradih 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<