JS返回满足给定条件的首个元素索引值

4 篇文章 1 订阅
2 篇文章 0 订阅

方法1:利用for循环

实现思想:利用for语句来遍历数组,在每次循环中判断数组元素是否符合条件;当有第一个元素满足条件,就立马输出,然后使用break语句退出整个循环。

下面通过实例来具体了解一下:

示例1:输出数组中年龄大于等于 18 的第一个元素

var ages = [3, 10, 18, 20];
for(var i=0;i<ages.length;i++){
	if (ages[i] >= 18) {
		console.log(ages[i]);
		break;
	}
}

ages数组中大于等于 18的元素有 18和20两个,但18在20前,因此满足添加的第一个元素为18。因此输出结果为:
在这里插入图片描述

方法2:利用 find() 方法

find() 方法为数组中的每个元素都调用一次函数,在回调函数内利用给定添加过滤元素,返回第一个通过检测的元素。

当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。
如果没有符合条件的元素返回 undefined
语法:

array.find(function callbackfn(Value,index,array),thisValue)

function callbackfn(Value,index,array):一个回调函数,不可省略,最多可接受三个参数:

value:当前数组元素的值,不可省略。
index:当前数组元素的数字索引。
array:当前元素属于的数组对象。
返回值:返回符合测试条件的第一个数组元素值,如果没有符合条件的则返回 undefined。

下面通过实例来具体了解一下:

示例1:输出数组中年龄大于等于 18 的第一个元素

function checkAdult(age) {
    return age >= 18;
}
var ages = [3, 10, 18, 20];
var age=ages.find(checkAdult);
console.log(age);

输出结果:

18

示例2:输出数组中第一个非数字的元素

function checkAdult(num) {
	var re = /^[0-9]+.?[0-9]*/;//判断字符串是否为数字  //判断正整数/[1−9]+[0−9]∗]∗/ 
    return !re.test(num);
}

var a = [1,"亿速云", 10, "red", 20,"22"];
console.log(a.find(checkAdult));

输出结果:
在这里插入图片描述

方法3:利用 findIndex() 方法

findIndex() 方法为数组中的每个元素都调用一次函数,在回调函数内利用给定添加过滤元素,返回第一个通过检测的元素的索引位置。

当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。
如果没有符合条件的元素返回 -1
语法:

array.findIndex(function callbackfn(Value,index,array),thisValue)

该方法的语法和 find()类似,参数取值可以参数find()方法。
示例1:找出价格-优惠金额大于0的第一个索引值(此处是vue2/uni-app的写法)

let res = [{name:'优惠券1',amount:30}{name:'优惠券2',amount:10}{name:'优惠券3',amount:100}{name:'优惠券3',amount:5}]
let price = 20
let arr = []
 res.forEach((item, index) => {
      if (Number(price) - Number(item.amount) > 0) {
             arr.push(item)
     }
});
this.couponsChooseBg = res.findIndex(this.findIndexFirst)
console.log(this.couponsChooseBg,'this.couponsChooseBg')
findIndexFirst(row){
   return Number(this.pricePay.price) - Number(row.amount) > 0
},

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值