在Array中根据id查找上一个、下一个

function getPrev(list, cur) {
    const curId = cur.id
    let maxId = Number.MIN_SAFE_INTEGER // -9007199254740991
    let maxItem  = null;
    let index = -1

    for (let i = 0; i < list.length; i++) {
        const item = list[i]

        const itemId = item.id

        if (itemId < curId) {
            maxId = Math.max(maxId, itemId)

            if(maxId == itemId){
                maxItem = item;
                index = i
            }
        }
    }


    return {
        index,
        item: maxItem
    }

}


function getNext(list, cur) {
    const curId = cur.id
    let minId = Number.MAX_SAFE_INTEGER // 9007199254740991
    let minItem = null;
    let index = -1

    for (let i = 0; i < list.length; i++) {
        const item = list[i]
        const itemId = item.id

        if (itemId > curId) {
            minId = Math.min(minId, itemId)

            if (minId == itemId) {
                minItem = item
                index = i
            }
        }
    }

    return {
        index,
        item: minItem
    }
}

[{
    id: 10
},
{
    id: 3
}, {
    id: 5
}]


function getPrev(list, cur) {
    const index = list.findIndex(item => item.id == cur.id)

    if (index < 0) {
        throw new Error('not found')
    }


    if (index <= 0) {
        return -1;

    }

    return index - 1
}


function getNext(list, cur) {
    const index = list.findIndex(item => item.id == cur.id)

    if (index < 0) {
        throw new Error('not found')
    }

    if (index >= list.length - 1) {
        return -1;

    }

    return index + 1
}


const list = [
    { id: 1, title: '所有' },
    { id: 2, title: 'S' },
    { id: 3, title: 'A' },
    { id: 5, title: 'B' },
    { id: 5, title: 'C' },
    { id: 6, title: 'D' },
    { id: 7, title: 'F' }
]


console.log(getPrev(list, {
    id: 1
}))

// 获取当前 id = 8 的下一个
console.log(getNext(list, {
    id: 8
}))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值