Javascript 如何删除小于给定值但不是最后一个值的值?
我认为这个例子是最简单的。 我有这个数组:[10,30,55,75,94,112]和值69。 我想得到:[55,75,94,112] 所以我想过滤掉较小的值,但保留最接近的值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的元素,只返回最后一个 返回
一个想法?这里有一种可能的方法(显然假设数组已排序)。想法是找到第一个大于或等于
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=>lim log(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