假设咱们有一我的员数组person,须要将元素里面age>18的元素删除数组
let person=[
{name:"lilei",age:"45"},
{name:"hanmeimei",age:"16"},
{name:"rose",age:"18"},
{name:"jack",age:"22"},
{name:"david",age:"25"},
{name:"bruce",age:"30"},
{name:"roby",age:"26"},
{name:"TMC",age:"11"},
{name:"lee",age:"40"},
]
复制代码
如今咱们使用forEach方法循环而后删除对应的目标元素函数
person.forEach((value,index)=>{
if(value.age>18){
person.splice(index,1)
}
})
复制代码
咱们看看输出结果是什么: 测试
通过查询资料,能够经过如下方法来解决这个问题: 方法一:在每次执行splice方法以后都讲当前循环的下标值减1,此方法在forEach方法中无效,至于具体缘由我也不清楚,请大佬指教。使用for循环实现 for(var i=0;i<person.length;i++){ if(person[i].age>18){ person.splice(i--,1) } } 输出结果:spa
方法二:使用for循环逆向遍历.这种方法至关于每次执行splice方法的时候都将数组的长度减1调试
for(var i=person.length-1;i>-1;i--){
if(person[i].age>18){
person.splice(i,1)
}
}
复制代码
输出结果:code
方法三:使用数组的filter方法。filter()方法使用指定的函数测试全部元素,返回一个包含全部经过的元素新的数组cdn
var newPerson=person.filter((p)=>p.age<=18)
复制代码
输出newPerson: blog
let obj=[
{name:"test",age:18},
{name:"test1",age:20},
{name:"test2",age:25}
]
let arr=[25,18,20]
let result=[]
for(let i=0;i<arr.length;i++){
result=result.concat(obj.filter(a=>a.age==arr[i]))
}
复制代码
输出结果: 排序