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次以上。计算机返回错误。
答案 0 :(得分:0)
我相信这可以解决您的问题。我发表了一些评论,如果您想进一步澄清,请回复。
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
是一种JavaScript object
,可以通过命名键存储值,read more here则不确定。
Filter是一种遍历数组每个值的方法,期望为每个值返回true
或false
。如果结果为true
,则该值将保留,否则将被忽略。
因此,当我们遍历每个值时,我们首先检查occ
是否具有该值名称的键。例如,对于值1
,我们将检查occ.1
是否存在,但是由于该值在数组中,因此我们可以通过将数组包装在括号中来访问它,如occ[val]
。如果它不存在,我们将给该对象一个具有该名称的键,并为其指定一个值1,因为它是第一次出现。但是,如果发现该值在occ
对象中已经有一个键,则可以使用++
运算符将该值增加1。因此,第二次出现会将计数增加到2,第三增加到3,依此类推。
最后,如果出现次数小于或等于n
(允许的最大出现次数),我们将返回测试结果。如果大于上述值,将返回false,并且该值将不保留在数组中。