JavaScript代码新闻任务

时间:2017-02-27 11:56:22

标签: javascript

在过去的几个小时里,我一直试图解决CodeWars的挑战之一 - 但没有任何运气 - 所以这就是任务 -

https://www.codewars.com/kata/554ca54ffa7d91b236000023/train/javascript - 指向任务的链接

任务

给定列表lst和数字N,创建一个新列表,其中包含最多n次的每个lst数而不重新排序。例如,如果N = 2,输入为[1,2,3,1,2,1,2,3],则取[1,2,3,1,2],然后放下[1,2,3,1,2] ]因为这会导致1和2在结果中3次,然后取3,这导致[1,2,3,1,2,3]。

这就是一个例子 -

实施例

deleteNth([1,1,1,1],2)// return [1,1]

deleteNth([20,37,20,21],1)// return [20,37,21]

function deleteNth(arr,x){

  for (var i = 0; i<arr.length; i++){
  for(var j = i+1; j<arr.length; j++){
  var crr = 1;
  if(arr[i]===arr[j])
  crr =+ 1;
  while(crr>=x){
    arr.splice(arr[j], 1);
  crr--;
  }
  }
  return arr;
}

这是我的代码和想法 - 因为我是JS的初学者,你可以给我建议并告诉我我的想法是否好。我也知道我犯了一些错误 - 如果可能的话 - 指出它们

2 个答案:

答案 0 :(得分:0)

totals对象将为数组的每个值保留一个计数器。

&#13;
&#13;
function deleteNth(arr, x) {
  let totals = {};
  return arr.filter(o => (totals[o] = ++totals[o] || 0) < x);
}

console.log(deleteNth([1, 1, 1, 1], 2));
console.log(deleteNth([20, 37, 20, 21], 1));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

一种简单的方法是:

const deleteNth = (lst, N) => {
  const res = [];
  const countNums = {};

  lst.forEach((el, idx) => {
    countNums[el] = countNums[el] ? countNums[el] + 1 : 1;
    if(countNums[el] <= N) {
      res.push(el);
    }
  })

  return res;
}

console.log(deleteNth([1,2,1, 3,1,2,3,3, 5], 2))
result => [ 1, 2, 1, 3, 2, 3, 5 ]