You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式确定sequence元素关联的items数组索引

如何确定引用序列元素对应原数组的索引?

首先看这段创建指向items数组元素引用序列的代码:

class Item { constructor(text) { this.text = text; }}
let items = [new Item ('a'), new Item ('b'), new Item ('c'), new Item ('a')]
let sequence = [items[0], items[3], items[1]]
console.log(sequence[2].text); //'b'

我们可以通过修改原数组元素来证明sequence保存的是引用而非复制:

items[1].text= 'bb'; 
console.log(sequence[2].text); //'bb'

从代码里能看到sequence[1]关联的是items[3],但如何通过编程方式自动确定这种对应关系?

解决方案

由于JavaScript中对象是引用类型,同一个对象的引用在严格相等(===)判断下会返回true。我们可以利用Array.prototype.findIndex()方法,遍历sequence中的每个元素,在items数组中查找与之严格相等的元素,从而得到对应的原数组索引。

示例代码:

// 遍历sequence,获取每个元素对应的items索引
sequence.forEach((element, seqIndex) => {
  const originalIndex = items.findIndex(item => item === element);
  console.log(`sequence[${seqIndex}] 对应 items 的索引是 ${originalIndex}`);
});

运行这段代码会输出:

sequence[0] 对应 items 的索引是 0
sequence[1] 对应 items 的索引是 3
sequence[2] 对应 items 的索引是 1

说明

  • findIndex()会返回数组中第一个满足测试函数的元素的索引,这里的测试函数用item === element判断是否为同一个对象引用,能精准匹配到原数组中的对应元素。
  • 即使原数组中有内容相同但引用不同的对象(比如示例中的items[0]和items[3]都是text='a'的Item实例),该方法也能正确区分,因为它们是不同的对象引用。

内容的提问来源于stack exchange,提问作者user2309803

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:18:06