第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

測試在 Javascript 中使用 reduce() 時是否到達數(shù)組的最后一項

測試在 Javascript 中使用 reduce() 時是否到達數(shù)組的最后一項

一只萌萌小番薯 2023-04-20 10:45:17
我正在嘗試實現(xiàn)相當于.join()使用來回答executeprogram.com.reduce()上的測驗。我的代碼通過了測試,但看起來很難看。我以丑陋的方式解決的具體問題是:構(gòu)造的函數(shù)將一個數(shù)組和一個分隔符作為參數(shù),但是在構(gòu)造結(jié)果連接輸出時,不應(yīng)在數(shù)組的最后一項之后插入分隔符。這意味著我必須測試,當使用迭代數(shù)組時,我是否在最后一項(這樣我就可以跳過使用分隔符)[糟糕:見下面的注釋]。使用或join()reduce()indexOflastIndexOf如果數(shù)組中有重復(fù)值,則不起作用。所以我創(chuàng)建了一個計數(shù)器。我不喜歡它。我很樂意提供有關(guān)如何更好地做到這一點的建議。這是代碼: function join(arr, separator) {  let counter = 0;  if (arr.length === 0) { return(''); }  else {     return (    arr.reduce((accumulator, item) =>      {        if (counter === arr.length - 1) {          return accumulator + item;        } else {          counter += 1;           return accumulator + item + separator;        }      },       '')    );  }} 測試及其預(yù)期輸出如下。同樣,上面的函數(shù)通過了所有測試,但我認為必須有更好的方法。> join(['a'], ',')Expected: 'a'> join(['a', 'b'], ',')Expected: 'a,b' > join(['a', 'b', 'c'], '')Expected: 'abc'> join(['a', 'b', 'c', 'd'], 'x')Expected: 'axbxcxd'> join(['a', 'b'], 'COMMA')Expected: 'aCOMMAb'> join(['', '', ''], ',')Expected: ',,'> join([], ',')Expected: ''注意:在看到所有有用的答案后,我意識到這個丑陋代碼的真正原因是我錯誤地假設(shè)分隔符出現(xiàn)在一個項目“之后”。實際上,分隔符位于項目之間,如果將其插入除第一個項目之外的每個項目之前,則可以使其位于每個項目之間。那么你不需要測試最后一項。當您刪除需要測試最后一項的假設(shè)時,一切都會簡單得多。所以基本上,我一開始就把問題說錯了。感謝大家的回答!
查看完整描述

4 回答

?
MMMHUHU

TA貢獻1834條經(jīng)驗 獲得超8個贊

使用 4 個參數(shù)調(diào)用 reduce 回調(diào):


arr.reduce(callback( accumulator, currentValue, index, array)

例子:


function join(arr, separator) {

  if (arr.length === 0) { return(''); }

  

  else { 

    return (

    arr.reduce((accumulator, item, counter) =>

      {

        if (counter === arr.length - 1) {

          return accumulator + item;

        } else {

          counter += 1; 

          return accumulator + item + separator;

        }

      }, 

      '')

    );

  }

}

    

    

console.log(join(['a'], ','))

console.log(join(['a', 'b'], ','))

console.log(join(['a', 'b', 'c'], ''))

console.log(join(['a', 'b', 'c', 'd'], 'x'))

console.log(join(['a', 'b'], 'COMMA'))

console.log(join(['', '', ''], ','))

console.log(join([], ','))

您可以通過以下方式稍微縮短代碼:

  1. 跳過空檢查 - 如果數(shù)組為空,reduce 將返回初始值 ( '')。

  2. 使用模板字符串和三元組。如果它不是最后一項,則添加分隔符,如果是,則使用空字符串。

  3. 由于計數(shù)器 ( i) 以 0 開頭,您可以跳過第一項的分隔符(0 轉(zhuǎn)換為false)。這允許您跳過三元中的比較。

const join = (arr, separator) => arr.reduce((accumulator, item, i) =>

  `${accumulator}${i ? separator : ''}${item}`

, '')

    

    

console.log(join(['a'], ','))

console.log(join(['a', 'b'], ','))

console.log(join(['a', 'b', 'c'], ''))

console.log(join(['a', 'b', 'c', 'd'], 'x'))

console.log(join(['a', 'b'], 'COMMA'))

console.log(join(['', '', ''], ','))

console.log(join([], ','))


更改順序時的另一個想法(基于@JCFord 的arr[0]想法)是解構(gòu)數(shù)組,獲取第一個元素 ( first),如果它為空,則為其分配默認值。然后減少數(shù)組的其余部分,并用作first初始值。


const join = ([first = '', ...arr], separator) => 

  arr.reduce((accumulator, item, i) => `${accumulator}${separator}${item}`, first)

    

    

console.log(join(['a'], ','))

console.log(join(['a', 'b'], ','))

console.log(join(['a', 'b', 'c'], ''))

console.log(join(['a', 'b', 'c', 'd'], 'x'))

console.log(join(['a', 'b'], 'COMMA'))

console.log(join(['', '', ''], ','))

console.log(join([], ','))


查看完整回答
反對 回復(fù) 2023-04-20
?
慕勒3428872

TA貢獻1848條經(jīng)驗 獲得超6個贊

正如其他人指出的那樣,您可以在回調(diào)中使用索引和數(shù)組參數(shù)。

但還有另一種方法。您不必知道何時遇到最后一個數(shù)組元素。您已經(jīng)知道第一個元素是什么,您可以直接使用它。

const join = (arr, sep=',') => arr.slice(1).reduce((acc, item) => acc + sep + item, arr[0]);

要進一步細化函數(shù),請利用累加器很少使用的默認初始值。如果您沒有將初始值傳遞給 reduce() 函數(shù),則回調(diào)的第一次執(zhí)行將獲得數(shù)組的第一個和第二個元素。

const join = (arr, sep=',') => arr.reduce((acc, item) => acc + sep + item);

并無誤地處理空數(shù)組......

const join = (arr, sep=',') => arr[0] ? arr.reduce((acc, item) => acc + sep + item) : '';



查看完整回答
反對 回復(fù) 2023-04-20
?
月關(guān)寶盒

TA貢獻1772條經(jīng)驗 獲得超5個贊

我是這樣做的。


假設(shè)您想用逗號分隔此數(shù)組,但以句點結(jié)尾。


let names = ['Amber', 'Bobby', 'Chris', 'Dennis', 'Edward'];

您可以使用第三個索引參數(shù)“i”并將其作為變量與要減少的數(shù)組的長度進行比較。


names.reduce((a, c, i) => {

   const isLast = i == names.length -1;

   return `${a}${c}` + (isLast ? '.' : ', '); 

}, "")

結(jié)果: 'Amber, Bobby, Chris, Dennis, Edward.'


查看完整回答
反對 回復(fù) 2023-04-20
?
FFIVE

TA貢獻1797條經(jīng)驗 獲得超6個贊

您可以通過從 中刪除初始值來簡化當前函數(shù)reduce。然后這將使用第一個元素作為初始值。您已經(jīng)設(shè)置了一個保護子句來處理空數(shù)組,因此在這方面您應(yīng)該沒問題。

function join(arr, separator) {

? if (arr.length == 0) return '';

? return arr.reduce((accumulator, item) => accumulator + separator + item);

}


console.log(join(['a'], ','))

console.log(join(['a', 'b'], ','))

console.log(join(['a', 'b', 'c'], ''))

console.log(join(['a', 'b', 'c', 'd'], 'x'))

console.log(join(['a', 'b'], 'COMMA'))

console.log(join(['', '', ''], ','))

console.log(join([], ','))


join使用字符串數(shù)組的另一種簡單方法reduce是根本不關(guān)心它產(chǎn)生的額外分隔符,并slice在減少數(shù)組后將其關(guān)閉。


function join(arr, separator) {

? return arr.reduce((accumulator, item) => accumulator + separator + item, '')

? ? ? ? ? ? .slice(separator.length);

}


console.log(join(['a'], ','))

console.log(join(['a', 'b'], ','))

console.log(join(['a', 'b', 'c'], ''))

console.log(join(['a', 'b', 'c', 'd'], 'x'))

console.log(join(['a', 'b'], 'COMMA'))

console.log(join(['', '', ''], ','))

console.log(join([], ','))



查看完整回答
反對 回復(fù) 2023-04-20
  • 4 回答
  • 0 關(guān)注
  • 234 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號