如果某个元素出现次数超过n次,则删除该元素的出现次数-我自己的代码


function deleteNth(arr,n){
let a = [];
let num_string;
arr.forEach(function(num) {
for (let i = 0; i < arr.length; i++) { 
if (num === arr[i]) {
num_string++;
}
if (num_string  < n+1) {
a.push(num);
}
}
});
return a;
a.length = 0;
}

我必须创建一个程序,该程序返回一个不带数组变量的新数组,并且返回次数超过n次。计算机返回一个错误。

我相信这会解决你的问题。我附上了一些评论,如果你想进一步澄清,请回复。

function filterOccurrences(arr, n) {
// Object to store occurrences of values
const occ = {};
// Return array after filter
return arr.filter(val => {
// If occurances object already contains current value
if (occ[val]) {
// Add +1 count to number of occurances of value
occ[val]++;
} else {
// Else add key with count 1
occ[val] = 1;
}
// Return boolean whether to include current value or not
return occ[val] <= n;
});
}
const sample = [1, 2, 2, 3, 3, 3, 3, 3, 3];
console.log(filterOccurrences(sample, 2));
// => [ 1, 2, 2, 3, 3 ]

您提供的代码有一些问题,例如a.length = 0;永远无法访问,因为它位于return语句下面。

解释

occ是一个javascriptobject,它通过命名键存储值,如果您不确定它们是如何工作的,请在此处阅读更多信息。

Filter是一种方法,它循环遍历数组的每个值,并期望为每个值返回truefalse。如果结果为true,则该值将被保留,否则将被忽略。

因此,当我们循环遍历每个值时,我们首先根据该值的名称检查occ是否有一个键。例如,对于值1,我们会检查occ.1是否存在,但由于该值在数组中,我们通过将数组括在括号中来访问它,如occ[val]。如果它不存在,我们用这个名称给occurrences对象一个键,并给它赋值1,因为这是第一次出现。但是,如果我们发现该值在occ对象中已经有一个键,则使用++运算符将该值增加1。因此,第二次出现将使计数增加到2,第三次增加到3,等等。

最后,如果出现次数小于或等于n(允许的最大出现次数(,我们将返回测试结果。如果在上面,将返回false,并且该值将不会保留在数组中。

最新更新