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是一种方法,它循环遍历数组的每个值,并期望为每个值返回true
或false
。如果结果为true
,则该值将被保留,否则将被忽略。
因此,当我们循环遍历每个值时,我们首先根据该值的名称检查occ
是否有一个键。例如,对于值1
,我们会检查occ.1
是否存在,但由于该值在数组中,我们通过将数组括在括号中来访问它,如occ[val]
。如果它不存在,我们用这个名称给occurrences对象一个键,并给它赋值1,因为这是第一次出现。但是,如果我们发现该值在occ
对象中已经有一个键,则使用++
运算符将该值增加1。因此,第二次出现将使计数增加到2,第三次增加到3,等等。
最后,如果出现次数小于或等于n
(允许的最大出现次数(,我们将返回测试结果。如果在上面,将返回false,并且该值将不会保留在数组中。