Osheep

时光不回头,当下最重要。

FreeCodeCamp筆記之:Drop it(*)

题目

队友该卖就卖,千万别舍不得。
当你的队伍被敌人包围时,你选择拯救谁、抛弃谁非常重要,如果选择错误就会造成团灭。如果是AD或AP,优先拯救。因为AD和AP是队伍输出的核心。其次应该拯救打野。因为打野死了对面就可以无所顾虑地打龙。最后才是辅助或上单。因为辅助和上单都是肉,死了也不会对团队造成毁灭性影响,该卖就卖。但真实中的团战远比这要复杂,你的队伍很可能会被敌人分割成2个或3个部分。当你救了一个重要的人时,很可能其他队友也会因此获救。
举个例子:
辅助和AD经常是在一起的,打野和中单在一起,上单经常一个人。你救了AD,辅助也经常因此获救。
让我们来丢弃数组(arr)的元素,从左边开始,直到回调函数return true就停止。第二个参数,func,是一个函数。用来测试数组的第一个元素,如果返回fasle,就从数组中抛出该元素(注意:此时数组已被改变),继续测试数组的第一个元素,如果返回fasle,继续抛出,直到返回true。最后返回数组的剩余部分,如果没有剩余,就返回一个空数组。如果你被卡住了,记得开大招 Read-Search-Ask。尝试与他人结伴编程。编写你自己的代码。
这是一些对你有帮助的资源:
Arguments object
Array.shift()
Array.slice()

思路

  1. 今天是挫败感很强的一天,我觉得我已经out很多了;数学烂不说,怎么连学js都车上了 打游戏,但类似的DOTA,LOL,王者农药我都没上过黄金,说这么多干啥,直接进入题目多好;
  2. 意思应该就是在arr中找不符合func的值,从arr中去掉;
  3. 题目给了提示:Array.slice() ,这个应该可以用上;

解答

function drop(arr, func) {
  // Drop them elements.
  var i =0;
  while(!func(arr[i]) && i< arr.length ){
    i++;    
  }
    arr = arr.slice(i,arr.length);   // 将去掉第i个不符合的数组重新赋值给 arr;
   return arr;
}
drop([1, 2, 3], function(n) {return n < 3; });
  • 题目还有提示Array.shift(),所以这个应该也可以用上;
function drop(arr, func) {
  // Drop them elements.
  var len =arr.length;
  for(var i = 0; i < len; i++){
    if(!func(arr[0])){
       arr.shift();
    }
  }
  return arr;
}
drop([1, 2, 3], function(n) {return n < 3; });
  • 这个题目有一个地方试了好久,就是为什么不能是 i<= arr.length 来写for循环,写了会有一些等式不满足,而是要用while才行,等找到答案了来更新;
点赞