背景
实际业务场景中遇到了一个数据筛选的逻辑,竟然难住了组内80%的前端人员。
条条大路通罗马,可惜大家都迷路了,很经典的一个前端逻辑,特此记录一下。
描述
给定一个数字n,给定数组arr内,根据define004后三位与数字n相匹配,返回对应applyAmount的值。
例如:输入1,返回100;输入14,返回1400;输入114返回 11400;
const arr = [
{
propertyCode: "define004",
applyAmount: 400,
},
{
propertyCode: "define001",
applyAmount: 100,
},
{
propertyCode: "define014",
applyAmount: 1400,
},
{
propertyCode: "define114",
applyAmount: 11400,
}
]
思路
根据define004后三位与数字n相匹配,得到当前对象,那怎么根据后三位去匹配呢?
有两个思路:
- 取
define004后三位,类型转换为Number类型,然后与n比较是否相等 - 给数字
n自动补齐0,拼接define,然后判断是否与definexxx相等
方法实现
掘友们有什么好的实现方式,欢迎补充
/**
* @param {number} n
* @param {Array} arr
* @return {number}
*/
// 方法1
let returnVal = function (n, arr) {
const res = arr.find(item => Number(item.propertyCode.substring(6)) === n)
return res && res.applyAmount
}
// 方法2
const returnVal = function (n, arr) {
const res = arr.find(item => `define${String(n).padStart(3, "0")}` === item.propertyCode)
return res && res.applyAmount
}