javascript - 从非零元素开始使用 findIndex()
问题描述
我想在从非零元素开始的数组上使用 findIndex() 。我已经编写了以下代码,它对我有用,但有更清洁的解决方案吗?
let desiredLastElementIndex = refundRequests.map((e,i) =>{
if(i<numberOfTickets){
return 0
}else{
return Math.round(e.purchasersMinimumPrice - refundRequests[i-1].purchasersMinimumPrice)
}
}).findIndex((e, i) => findIndex((e, i) => e !== 0)
例如,当使用 indexOf 时,我可以将要开始的索引作为第二个参数传递。
理想情况下,我想做类似...
let desiredLastElementIndex = refundRequests.findIndex((e, i) => {
e.purchasersMinimumPrice !== refundRequests[i+1].purchasersMinimumPrice
}, INDEXTOSTARTFROM) + 1
解决方案
fromIndex()
您可以在将回调函数传递给Array.prototype.find()
or之前定义一个调用来包装回调函数的辅助方法Array.prototype.findIndex()
。它可以包装回调的其他函数是Array.prototype.filter()
、Array.prototype.forEach()
和Array.prototype.some()
。
function fromIndex(cb, index) {
return function (e, i, a) {
return i >= index && cb.call(this, e, i, a);
};
}
const array = [3, 7, 5, 1, 9];
const f = element => element > 4;
console.log(`value ${array.find(f)} index ${array.findIndex(f)}`);
console.log(`value ${array.find(fromIndex(f, 3))} index ${array.findIndex(fromIndex(f, 3))}`);
在您的示例中,用法如下所示:
let desiredLastElementIndex = refundRequests.findIndex(fromIndex((e, i) => {
e.purchasersMinimumPrice !== refundRequests[i + 1].purchasersMinimumPrice
}, INDEXTOSTARTFROM)) + 1
find()
为了获得更多乐趣,您可以专门为and定义一些 iteratee-last curried 函数findIndex()
:
const fromIndex = (cb, index = 0) => (e, i, a) => (
i >= index && cb(e, i, a)
);
const wrap = (impl, apply) => (...args) => (
f => iteratee => impl(iteratee, f)
)(
apply(...args)
);
const find = wrap((array, fn) => array.find(fn), fromIndex);
const findIndex = wrap((array, fn) => array.findIndex(fn), fromIndex);
const array = [3, 7, 5, 1, 9];
const f = element => element > 4;
console.log(`value ${find(f)(array)} index ${findIndex(f)(array)}`);
console.log(`value ${find(f, 3)(array)} index ${findIndex(f, 3)(array)}`);
如果 / 当F# 风格的管道运算符符合规范时,这将使这些部分函数看起来非常吸引人:
// find() and findIndex() defined as above
const array = [3, 7, 5, 1, 9];
const f = element => element > 4;
// value 7 index 1
console.log(`value ${array |> find(f)} index ${array |> findIndex(f)}`);
// value 9 index 4
console.log(`value ${array |> find(f, 3)} index ${array |> findIndex(f, 3)}`);
推荐阅读
- javascript - 如何使键盘按钮不会在 javascript 中发送垃圾邮件。(造成延迟)
- node.js - 如何基于创建字段后触发的firebase云功能创建Stripe客户
- python - 为什么我的点子不起作用
- javascript - 使用javascript在html中具有值的AUTO SUM textboxt
- apache-spark-sql - Spark HDFS 直接读取与 Hive 外部表读取
- javascript - 加载本地 json 文件以对 js web 请求进行单元测试是一个好习惯吗?
- octave - 八度错误:返回列表中未定义的元素
- pandas - 如何将数据框中的多个条目合并为一个条目,Python
- ios - iphone x中的UICollection标头已满
- flutter - Flutter中,如何解决`AnimatedCrossFade`低效设计?