如何在对象数组的键值范围内查找值并执行指定数学计算?
解决方法
先修正你的测试代码问题
你写的测试代码存在两个明显错误:
a是数组,不能直接通过a.s访问属性,必须先获取数组中的元素,比如a[0].s- 区间判断逻辑错误,
a.s<=5>=a.d不是判断数值在区间内的正确写法,正确逻辑应该是数值 >= 左边界 && 数值 <= 右边界
修正后的测试代码:
const a = [{s: 3, d: 6, q: 33}] if (a[0].s <= 5 && 5 <= a[0].d) { console.log(a[0].q) }
原问题的正确实现
核心步骤
- 从数组中筛选出满足
w1 ≤ 3 ≤ w2的目标对象 - 对目标对象执行指定的数学计算
完整代码实现
const lookUpVal = 3; const arrayOfObjects = [ {w1: 0.1, w2: 0.5, Jv1: 6.13, Jv2: 2.75, a: 3.89}, {w1: 0.5, w2: 2, Jv1: 2.75, Jv2: 1.36, a: 3.54}, {w1: 2, w2: 4, Jv1: 1.36, Jv2: 0.95, a: 3.57}, {w1: 4, w2: 9.63, Jv1: 0.95, Jv2: 0.55, a: 3.5}, {w1: 9.63, w2: 35, Jv1: 0.55, Jv2: 0.3, a: 3.5}, {w1: 35, w2: 78.03, Jv1: 0.3, Jv2: 0, a: 3.5} ]; // 找到符合区间条件的第一个对象 const targetObj = arrayOfObjects.find(obj => obj.w1 <= lookUpVal && lookUpVal <= obj.w2); if (targetObj) { // 按要求依次计算各参数 const m = Math.log(targetObj.w2 / targetObj.w1) / Math.log(targetObj.Jv2 / targetObj.Jv1); const b = Math.log(targetObj.a); const logJv = m * Math.log(lookUpVal) + b; const Jv = Math.pow(10, logJv); // 输出计算结果 console.log('m:', m); console.log('b:', b); console.log('logJv:', logJv); console.log('Jv:', Jv); } else { console.log('未找到符合条件的对象'); }
代码说明
- 使用
Array.find()方法快速定位第一个符合区间条件的对象,这里会匹配到数组中第三个对象(w1=2, w2=4) - JavaScript中
Math.log()为自然对数(ln),如果需要常用对数(log₁₀),可替换为Math.log10() 10^logJv通过Math.pow(10, logJv)实现,这是JS中计算幂次的标准写法- 若需要处理多个符合条件的对象,可将
find()替换为filter(),再遍历筛选结果逐个计算
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

