猿问

JS:查找在数组中出现 x 多次的元素。(没有对象)

给定

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

如果我想找到出现的元素,比如x = 3数组中的时间,我将如何在不使用对象的情况下做到这一点?即5,6。最好通过数组方法。


繁花如伊
浏览 122回答 3
3回答

RISEBY

您应该能够仅使用filter()、indexOf()和来实现reduce():function filterByCount(array, count) {&nbsp; return array.filter((a, index) =>&nbsp; &nbsp; array.indexOf(a) === index &&&nbsp; &nbsp; array.reduce((acc, b) => +(a === b) + acc, 0) === count&nbsp; );}const arr = [1, 5, 3, 5, 1, 5, 6, 6, 6];console.log(filterByCount(arr, 3));请注意,这种方法效率很低。通过使用类似的类Map,您可以在 O(n) 时间内而不是 O(n&nbsp;2&nbsp;) 时间内实现这一目标。在 O(n log(n)) 时间内实现此目的的另一种不太简单的方法是对数组进行排序,然后将每个值的第一个和最后一个索引之间的差异与预期的count.&nbsp;此解决方案需要sort()&nbsp;和filter()。如果您不想改变原始数组,那么slice()也需要:function filterByCount(array, count) {&nbsp; // uncomment to avoid mutating the input array&nbsp; return array/*.slice()*/.sort((a, b) =>&nbsp; &nbsp; a - b&nbsp; ).filter((value, index, sorted) =>&nbsp; &nbsp; (index === 0 || sorted[index - 1] !== value) &&&nbsp; &nbsp; index + count - 1 < sorted.length &&&nbsp; &nbsp; sorted[index + count - 1] === value &&&nbsp; &nbsp; (index + count >= sorted.length || sorted[index + count] !== value)&nbsp; );}const arr = [1, 5, 3, 5, 1, 5, 6, 6, 6];console.log(filterByCount(arr, 3));

肥皂起泡泡

不过,这只是一个想法,如果您可以对数组进行排序,则可以计算连续出现的数字。function findRepeatingNumbers(numbers, count) {&nbsp; numbers.sort((a, b) => a - b);&nbsp; const found = [];&nbsp; let counter = 1;&nbsp; for (let i = 1; i < numbers.length; i++) {&nbsp; &nbsp; if (numbers[i - 1] == numbers[i]) {&nbsp; &nbsp; &nbsp; counter += 1;&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; if (counter === count) {&nbsp; &nbsp; &nbsp; &nbsp; found.push(numbers[i - 1]);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; counter = 1;&nbsp; &nbsp; }&nbsp; }&nbsp; if (counter == count) {&nbsp; &nbsp; found.push(numbers[numbers.length - 1]);&nbsp; }&nbsp; return found;}console.log(findRepeatingNumbers([1, 5, 3, 5, 1, 5, 6, 6, 6], 3));

慕莱坞森

如果你想找出在数组中出现了多少次的元素,你可以很容易地知道下面这段代码。例如,这里的 6 是这个数组中的 3 次。运行代码片段检查一下。let arr = [1, 5, 3, 5, 1, 5, 6, 6, 6];console.log((arr.join("").match(new RegExp("6", "g")) || []).length)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答