亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

JS:查找在數組中出現 x 多次的元素。(沒有對象)

JS:查找在數組中出現 x 多次的元素。(沒有對象)

繁花如伊 2022-11-03 09:52:37
給定arr = [1,5,3,5,1,5,6,6,6];如果我想找到出現的元素,比如x = 3數組中的時間,我將如何在不使用對象的情況下做到這一點?即5,6。最好通過數組方法。
查看完整描述

3 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

您應該能夠僅使用filter()、indexOf()和來實現reduce()

function filterByCount(array, count) {

  return array.filter((a, index) =>

    array.indexOf(a) === index &&

    array.reduce((acc, b) => +(a === b) + acc, 0) === count

  );

}


const arr = [1, 5, 3, 5, 1, 5, 6, 6, 6];


console.log(filterByCount(arr, 3));


請注意,這種方法效率很低。通過使用類似的類Map,您可以在 O(n) 時間內而不是 O(n 2 ) 時間內實現這一目標。


在 O(n log(n)) 時間內實現此目的的另一種不太簡單的方法是對數組進行排序,然后將每個值的第一個和最后一個索引之間的差異與預期的count. 此解決方案需要sort() 和filter()。如果您不想改變原始數組,那么slice()也需要:

function filterByCount(array, count) {

  // uncomment to avoid mutating the input array

  return array/*.slice()*/.sort((a, b) =>

    a - b

  ).filter((value, index, sorted) =>

    (index === 0 || sorted[index - 1] !== value) &&

    index + count - 1 < sorted.length &&

    sorted[index + count - 1] === value &&

    (index + count >= sorted.length || sorted[index + count] !== value)

  );

}


const arr = [1, 5, 3, 5, 1, 5, 6, 6, 6];


console.log(filterByCount(arr, 3));


查看完整回答
反對 回復 2022-11-03
?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

不過,這只是一個想法,如果您可以對數組進行排序,則可以計算連續出現的數字。


function findRepeatingNumbers(numbers, count) {

  numbers.sort((a, b) => a - b);


  const found = [];

  let counter = 1;


  for (let i = 1; i < numbers.length; i++) {

    if (numbers[i - 1] == numbers[i]) {

      counter += 1;

    } else {

      if (counter === count) {

        found.push(numbers[i - 1]);

      }

      counter = 1;

    }

  }


  if (counter == count) {

    found.push(numbers[numbers.length - 1]);

  }


  return found;

}


console.log(findRepeatingNumbers([1, 5, 3, 5, 1, 5, 6, 6, 6], 3));


查看完整回答
反對 回復 2022-11-03
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

如果你想找出在數組中出現了多少次的元素,你可以很容易地知道下面這段代碼。例如,這里的 6 是這個數組中的 3 次。


運行代碼片段檢查一下。


let arr = [1, 5, 3, 5, 1, 5, 6, 6, 6];

console.log((arr.join("").match(new RegExp("6", "g")) || []).length)


查看完整回答
反對 回復 2022-11-03
  • 3 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號