微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获得a和b之间的所有数字? (0 - 100)

如何解决如何获得a和b之间的所有数字? (0 - 100)

我有一个这样的对象数组:

let arr = [{start: 0,end: 50,id: '55'},{start: 51,end: 100,id: '66'}];

我还有一个字符串,例如在这种情况下我们有一个长度为 100 的字符串;

所以当我点击字符串中的某个位置时,我可以获得插入符号位置:

  const range = window.getSelection()?.getRangeAt(0);
  const preCaretRange = range?.cloneRange();
  preCaretRange?.selectNodeContents(element);
  caretCharOffset = preCaretRange?.toString().length || 0;

我的目标 - 当我点击字符串中的某个位置时获取对象的 id。

这意味着当我点击 33 索引时 - 我会得到 id 55,当我点击 87 索引时,我会得到 id {{1}等我怎么做,有人可以帮我吗?

解决方法

如果位置匹配的范围可以有多个,您可以使用例如reduce并检查值是否大于或等于起始值,以及小于或等于结束值。

然后聚合 id 属性的值。

let arr = [{start: 0,end: 50,id: '55'},{start: 51,end: 100,id: '66'}];
const getObjectId = pos => {
  return arr.reduce((a,c) => {
    if (pos >= c.start && pos <= c.end) {
      a.push(c.id);
    }
    return a;
  },[]);
}

console.log(getObjectId(33));
console.log(getObjectId(87));

如果只有一个可能的返回值,例如可以使用 for 循环并在第一次匹配时返回值。

let arr = [{start: 0,id: '66'}];
const getObjectId = pos => {
  for (let i = 0; i <= arr.length; i++) {
    let p = arr[i];
    if (pos >= p.start && pos <= p.end) {
      return p.id;
    }
  }
}

console.log(getObjectId(33));
console.log(getObjectId(87));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。