Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何删除小于给定值但不是最后一个值的值?_Javascript_Arrays_Filter - Fatal编程技术网

Javascript 如何删除小于给定值但不是最后一个值的值?

Javascript 如何删除小于给定值但不是最后一个值的值?,javascript,arrays,filter,Javascript,Arrays,Filter,我认为这个例子是最简单的。 我有这个数组:[10,30,55,75,94,112]和值69。 我想得到:[55,75,94,112] 所以我想过滤掉较小的值,但保留最接近的值 一个想法?这里有一种可能的方法(显然假设数组已排序)。想法是找到第一个大于或等于lim的项目;当您找到它时,不需要检查数组的其余部分(所有其他答案都是这样做的) 函数进程排序(arr、lim){ 常数i=arr.findIndex(el=>el>=lim); 如果(i=-1)//没有大于lim的元素,只返回最后一个 返回

我认为这个例子是最简单的。 我有这个数组:[10,30,55,75,94,112]和值69。 我想得到:[55,75,94,112]

所以我想过滤掉较小的值,但保留最接近的值


一个想法?

这里有一种可能的方法(显然假设数组已排序)。想法是找到第一个大于或等于
lim
的项目;当您找到它时,不需要检查数组的其余部分(所有其他答案都是这样做的)

函数进程排序(arr、lim){
常数i=arr.findIndex(el=>el>=lim);
如果(i=-1)//没有大于lim的元素,只返回最后一个
返回arr.slice(-1);
如果(i==0)//第一个元素大于lim,则返回所有元素!
返回arr;
返回arr.slice(i-1);
}

log(processSorted([10,30,55,75,94112,69))使用Array.filter、Array.pop、Array.sort Array.concat

function f(val, array){
  // array.sort( (a,b)=>a-b ); // if array isn't sorted, you must be use
  return array.filter(e=>e>val).concat([array.filter(e=>e<val).pop()])
}
函数f(val,数组){
//sort((a,b)=>a-b);//如果数组未排序,则必须使用

返回array.filter(e=>e>val).concat([array.filter(e=>e给定一个输入数组
arr
和一个值
val
):

  • 迭代
    arr
    ,将大于
    val
    的所有元素拼接到一个单独的数组中
  • arr
    中剩余的最大元素追加到新数组中
  • arr=[1,3,5,7,9,11];
    val=6;
    new_arr=[];//初始化新数组
    对于(设i=0;ival){//如果当前元素大于给定值
    new_arr.push(arr.splice(i,1)[0])//将其拼接到新阵列中
    i--;//递减i,以避免跳过任何元素
    }
    }
    new_arr.unshift(Math.max(…arr))//将最接近的值添加到新数组中
    
    console.log(new_arr);
    类似于使用过滤器的内容

      var arr = [1, 3, 5, 7, 9, 11];
      var value = 6;
    
      function remove(arr, value) {
        let copy = arr;
        let newArr = arr.filter((arr, index) => !((arr < value) && (copy[index + 1] < value)))
        console.log(newArr)
      }
    
      remove(arr, value) // [5, 7, 9, 11]
    
    var-arr=[1,3,5,7,9,11];
    var值=6;
    功能移除(arr,值){
    让copy=arr;
    设newArr=arr.filter((arr,index)=>!((arr
    首先为低于限制的数字查找最近的增量。然后过滤所有低于限制的数字,并且它们与限制的增量不等于上一步中找到的增量

    注意:这假设数字是唯一的,但它们不必排序

    const fn=(arr,lim)=>{
    const closestSmallerDelta=arr.reduce((acc,n)=>
    limacc?acc:lim-n
    ,无穷大)
    返回arr.filter(n=>limlog(fn([112,55,75,94,10,30,69));
    假设数组总是排序的:

    constDeleteSmallerButlastone=(数组,refNum)=>{
    警察终结者=[]
    for(让[index,num]of array.entries()){
    if(num=refNum)finalArr.push(num)
    如果(num>refNum)最终推送(num)
    }
    返回终结者
    
    }
    只需筛选,并检查数组中的此值或下一个值是否>=limit

    const filter=(数组,限制)=>array.filter((值,索引)=>value>=limit | |数组[index+1]>limit);
    
    console.log(filter([10,30,55,75,94,112],69));
    您在尝试此操作时遇到了什么问题?数组是否始终排序?为什么不排序为7,9,11?因为5是第一个小于targetyAH的值,但7也一样接近。:)你不需要
    排序,因为输入是排序的?但是这一行得到了我的投票:pHmmm如果值是113,我忘记了不起作用。[array.filter(e=>ee>val))@1811L201DA我更新了解决方案,array.prototype.sort方法在没有给出回调函数时不排序。我更新
    .sort((a,b)=>a-b)
    @HasanDelibaş-这是排序,而不是数字:p