为了账号安全,请及时绑定邮箱和手机立即绑定

如何从javascript中的对象数组中获取最接近的先前id

如何从javascript中的对象数组中获取最接近的先前id

红颜莎娜 2019-04-24 22:19:44
我有一个对象数组,我想从最近的对象获得最接近的前一个id。我能够得到最接近的下一个id,它的工作正常但是以前不能正常工作。它直接取对象的第一个id。这是代码以下。任何人都可以帮助我。JAVASCRIPTconst array = [{id:4}, {id:10}, {id:15}];const findClosesPrevtId = (x) => ( array.find( ({id}) => x <= id ) || {} ).id;const findClosestNextId = (x) => ( array.find( ({id}) => x >= id ) || {} ).id;console.log(findClosesPrevtId(5));console.log(findClosestNextId(11));
查看完整描述

4 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

我发现更容易反转数组并将比较切换>=为<=:


const findClosestNextId  = (x, arr) => 

  (arr.find ( ({id}) => id >= x) || {} ) .id


const findClosestPrevId  = (x, arr) => 

  (arr .slice(0) .reverse() .find ( ({id}) => id <= x) || {}) .id


const array = [{ id: 4 }, { id: 10 }, { id: 15 }];


console .log (

  findClosestNextId (5,  array), //=> 10

  findClosestNextId (11, array), //=> 15

  findClosestNextId (42, array), //=> undefined


  findClosestPrevId (5,  array), //=> 4

  findClosestPrevId (11, array), //=> 10

  findClosestPrevId (2,  array), //=> undefined

)  

该slice电话有防止这种修改原始数组。undefined如果没有找到元素,这将返回。


查看完整回答
反对 回复 2019-05-17
?
MMTTMM

TA贡献1869条经验 获得超4个赞

我对您的代码进行了一些更改,现在应该可以正常工作了。看一看。


    const array = [{id:3}, {id:4}, {id:10}, {id:15}];

    // you should order the list by id before you try to search, this incase you have not orginized list.

    // filter the list first and get the prev id to 5 

    // you should get 3 and 4 then 

    // slice(-1) to get the last element of the array which should be 4

    const findClosesPrevtId = (x) =>

    (array.filter(({id}) => id <= x ).slice(-1)[0] || {}).id;

    const findClosestNextId = (x) => 

    (array.filter(({id}) => id >= x )[0] || {}).id;


    console.log("Prev to 5:"+ findClosesPrevtId(5));

    console.log("Next to 11:" +findClosestNextId(11));


查看完整回答
反对 回复 2019-05-17
  • 4 回答
  • 0 关注
  • 573 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信