JavaScript30肪获,關(guān)于數(shù)組的挑戰(zhàn)

最近面試有問道數(shù)組相關(guān)的問題,我突然想到之前我投稿的js30中有兩集是關(guān)于數(shù)組的內(nèi)容柒傻,我覺得這兩集非常有練習(xí)的價(jià)值孝赫,所以寫下本文來記錄。

數(shù)組第一集中是關(guān)于以下數(shù)組的處理红符,一堆關(guān)于發(fā)明家和人名的信息:

const inventors = [
     { first: 'Albert', last: 'Einstein', year: 1879, passed: 1955 },
     { first: 'Isaac', last: 'Newton', year: 1643, passed: 1727 },
     { first: 'Galileo', last: 'Galilei', year: 1564, passed: 1642 },
     { first: 'Marie', last: 'Curie', year: 1867, passed: 1934 },
     { first: 'Johannes', last: 'Kepler', year: 1571, passed: 1630 },
     { first: 'Nicolaus', last: 'Copernicus', year: 1473, passed: 1543 },
     { first: 'Max', last: 'Planck', year: 1858, passed: 1947 },
     { first: 'Katherine', last: 'Blodgett', year: 1898, passed: 1979 },
     { first: 'Ada', last: 'Lovelace', year: 1815, passed: 1852 },
     { first: 'Sarah E.', last: 'Goode', year: 1855, passed: 1905 },
     { first: 'Lise', last: 'Meitner', year: 1878, passed: 1968 },
     { first: 'Hanna', last: 'Hammarstr?m', year: 1829, passed: 1909 }
   ];
const people = ['Beck, Glenn', 'Becker, Carl', 'Beckett, Samuel', 'Beddoes, Mick', 'Beecher, Henry',
      'Beethoven, Ludwig', 'Begin, Menachem', 'Belloc, Hilaire', 'Bellow, Saul', 'Benchley, Robert',
      'Benenson, Peter', 'Ben-Gurion, David', 'Benjamin, Walter', 'Benn, Tony', 'Bennington, Chester',
      'Benson, Leana', 'Bent, Silas', 'Bentsen, Lloyd', 'Berger, Ric', 'Bergman, Ingmar', 'Berio, Luciano',
      'Berle, Milton', 'Berlin, Irving', 'Berne, Eric', 'Bernhard, Sandra', 'Berra, Yogi', 'Berry, Halle',
      'Berry, Wendell', 'Bethea, Erin', 'Bevan, Aneurin', 'Bevel, Ken', 'Biden, Joseph', 'Bierce, Ambrose',
      'Biko, Steve', 'Billings, Josh', 'Biondo, Frank', 'Birrell, Augustine', 'Black, Elk', 'Blair, Robert',
      'Blair, Tony', 'Blake, William'
    ];

一共有八題青柄。

Array.prototype.filter()

1.Filter the list of inventors for those who were born in the 1500's

(過濾出 inventors數(shù)組中15世紀(jì)出生的人)

要求:使用filter()方法過濾
分析:判斷條件為year大于等于1500且year小于1600
filter()用法:filter()跟據(jù)return值為true或false,可以返回一個(gè)符合過濾條件的數(shù)組预侯,常用于對數(shù)據(jù)的篩選

const arr = inventors.filter(item => item.year >= 1500 && item.year < 1600)
console.table(arr);
15世紀(jì)出生的人

Array.prototype.map()

2. Give us an array of the inventors first and last names

(給我們一個(gè)關(guān)于發(fā)明家姓和名組成的數(shù)組)

要求:使用map()方法處理
分析:篩選出姓和名的部分返回一個(gè)數(shù)組
map()用法: map()可以通過return對數(shù)組的內(nèi)容進(jìn)行處理致开,返回一個(gè)由處理后的數(shù)據(jù)組成的數(shù)組

 const fullNames = inventors.map(inventor => `${inventor.first} ${inventor.last}`);
 console.log(fullNames);
姓名

map與forEach的區(qū)別

對于map(),不得不提它與forEach的區(qū)別萎馅。
map()會返回一個(gè)新數(shù)組
forEach沒有返回值(undefined)双戳,單純的對遍歷的每一項(xiàng)進(jìn)行處理,如果是用forEach來回答第二題糜芳,代碼如下

 let arr = [] // 創(chuàng)建新數(shù)組
    inventors.forEach(item => {
      arr.push(item.first + ' ' + item.last) // 推送到新數(shù)組
    });
  console.log(arr);

Array.prototype.sort()

3. Sort the inventors by birthdate, oldest to youngest
(根據(jù)出生日期排序飒货,由年長到年輕)
要求:使用sort()方法過濾
分析:根據(jù)出生日期year可以通過sort()方法可以直接排序,由小排到大(年長的出生早)
sort()用法:sort(compareFunction())跟據(jù)compareFunction()的return值為大于0峭竣、等于0塘辅、小于0進(jìn)行數(shù)據(jù)的排序

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 會被排列到 b 之前皆撩;

  • 如果 compareFunction(a, b) 等于 0 扣墩, a 和 b 的相對位置不變。備注: ECMAScript 標(biāo)準(zhǔn)并不保證這一行為扛吞,而且也不是所有瀏覽器都會遵守(例如 Mozilla 在 2003 年之前的版本)呻惕;

  • 如果 compareFunction(a, b) 大于 0 , b 會被排列到 a 之前滥比。

const arr =  inventors.sort((a, b) => a.year - b.year)
console.table(arr);
出生日期排序

Array.prototype.reduce()

4. How many years did all the inventors live all together?
(所有的發(fā)明家一起活了多少年)
要求:使用reduce()方法進(jìn)行累加和
分析:計(jì)算出每個(gè)發(fā)明家的壽命然后累加
reduce()用法:

let value = arr.reduce(function(accumulator, item, index, array) {
  // ...
}, [initial]);

  • accumulator —— 是上一個(gè)函數(shù)調(diào)用的結(jié)果蟆融,第一次等于 initial(如果提供了 initial 的話)。
  • item —— 當(dāng)前的數(shù)組元素守呜。
  • index —— 當(dāng)前索引型酥。
  • arr —— 數(shù)組本身。
  • initial——初始值
const sum = inventors.reduce((sumNum,current)=>{
      return sumNum + current.passed - current.year
},0) 
console.log(sum)

Sort練習(xí)1

5. Sort the inventors by years lived
(根據(jù)年齡給發(fā)明家排序)

const arr =  inventors.sort((a, b) => (a.passed - a.year) - (b.passed - b.year))
console.table(arr);

頁面篩選

6. create a list of Boulevards in Paris that contain 'de' anywhere in the name
(創(chuàng)建一份巴黎林蔭大道的列表查乒,在名字中包含“de”)
https://en.wikipedia.org/wiki/Category:Boulevards_in_Paris
這個(gè)練習(xí)需要打開網(wǎng)頁進(jìn)行信息的獲取

let arr = []
document.querySelectorAll('.mw-category-group li a').forEach((a) => {
    ary.push(a.title)
})
let ans = ary.filter(title=>title.indexOf('de') !== -1)

Sort練習(xí)2

7. Sort the people alphabetically by last name
(按姓氏的字母給人排序)
分析:需要先將人名切分為兩部分弥喉,然后根據(jù)last name來排序

let arr = people.sort((a, b) => {
      let [aFirst, aLast] = a.split(", ")
      let [bFirst, bLast] = b.split(", ")
      return aLast > bLast ? 1 : bLast > aLast ? -1 : 0
})
console.table(arr);

Reduce練習(xí)

8.Sum up the instances of each of these
(記錄每一個(gè)出現(xiàn)幾次)

const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck'
];

分析: 使用reduce()創(chuàng)建一個(gè)新的對象,值為記錄出現(xiàn)的次數(shù)

const transportation = data.reduce(function(obj, item) {
  if (!obj[item]) {
    obj[item] = 0;
  }
  obj[item]++;
  return obj;
}, {});
console.log(transportation);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玛迄,一起剝皮案震驚了整個(gè)濱河市由境,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖虏杰,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讥蟆,死亡現(xiàn)場離奇詭異,居然都是意外死亡纺阔,警方通過查閱死者的電腦和手機(jī)瘸彤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笛钝,“玉大人质况,你說我怎么就攤上這事〔C遥” “怎么了结榄?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長囤捻。 經(jīng)常有香客問我臼朗,道長,這世上最難降的妖魔是什么蝎土? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任视哑,我火速辦了婚禮,結(jié)果婚禮上瘟则,老公的妹妹穿的比我還像新娘。我一直安慰自己枝秤,他們只是感情好醋拧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淀弹,像睡著了一般丹壕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上薇溃,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天菌赖,我揣著相機(jī)與錄音,去河邊找鬼沐序。 笑死琉用,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的策幼。 我是一名探鬼主播邑时,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼特姐!你這毒婦竟也來了晶丘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浅浮,沒想到半個(gè)月后沫浆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滚秩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年专执,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叔遂。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡他炊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出已艰,到底是詐尸還是另有隱情痊末,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布哩掺,位于F島的核電站凿叠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嚼吞。R本人自食惡果不足惜盒件,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舱禽。 院中可真熱鬧炒刁,春花似錦、人聲如沸誊稚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽里伯。三九已至城瞎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疾瓮,已是汗流浹背脖镀。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狼电,地道東北人蜒灰。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像肩碟,于是被迫代替她去往敵國和親卷员。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容