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

How to get all number between a and 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 66 等。我该怎么做,有人能帮我吗?

如果可以有多个位置匹配的范围,您可以使用例如 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));

如果只有一个 return 可能的值,您可以使用 for 循环和 return 第一次匹配出现时的值。

let arr = [{start: 0, end: 50, id: '55'}, {start: 51, end: 100, 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));