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

如何在数组中找到索引等于另一个元素值的元素?

如何在数组中找到索引等于另一个元素值的元素?

月关宝盒 2021-07-03 01:48:43
假设我有一个 [5,4,0,3,1,6,2] 数组。我取索引 0 处的第一个元素,其值为 5。接下来,我想找到索引为 5 的元素。这对应于 6 的值。然后我想找到索引 6 处的值,即是 2,然后 2 指向 0,我们又回到了开始,所以我们停止了。我需要根据索引值喜欢“链”元素,并在我的数组中找到链的长度。在我给定的示例中,它将是 4。我该怎么做?我觉得我在这里错过了一些简单的东西。
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

您可以决定从哪里开始(在这种情况下索引为零),然后设置一个 while 循环来打印当前值,然后将当前值设置为该索引处的数组查找。当数组查找返回时undefined停止。如果你想要计数,你可以在循环时维护一个计数器变量:


let arr = [5,4,0,3,1,6,2]

let start = arr[0]

let seen = new Set();

let count = 0

while (start != undefined && !seen.has(start)){

    console.log(start)

    seen.add(start)

    count++

    start = arr[start]

}

console.log("Count:", count)


您还可以保留一组访问过的索引以帮助避免循环。在这种情况下,如果您从索引 1 开始,它将在 1 和 4 之间反弹。


查看完整回答
反对 回复 2021-07-08
?
动漫人物

TA贡献1815条经验 获得超10个赞

您也可以通过单个Array.reduce解决这个问题:


let arr = [5,4,0,3,1,6,2]


let result = arr.reduce((acc, cur, indx, arr) => {

  let last = acc[acc.length-1]

  !indx ? acc.push(cur) : !last ? null : acc.push(arr[last])

  return acc

}, [])


console.log('result: ', result, 'count: ', result.length)


为了进一步简化,您可以始终从 中的第一个元素开始accumulator array:


let arr = [5,4,0,3,1,6,2]


let result = arr.reduce((acc, cur, _, arr) => {

  let last = acc[acc.length - 1]

  last ? acc.push(arr[last]) : null

  return acc

}, [arr[0]])


console.log('result: ', result, 'count: ', result.length)


此外,如果您愿意,您可以将其作为一行:


let arr = [5,4,0,3,1,6,2]


let r = arr.reduce((r, c, _, a) => 

   (r[r.length-1] ? r.push(a[r[r.length-1]]) : null, r), [arr[0]])


console.log('result: ', r, 'count: ', r.length)


查看完整回答
反对 回复 2021-07-08
?
皈依舞

TA贡献1851条经验 获得超3个赞

一种选择是do/while循环,它不断地重新分配一个nextIndex变量,一旦nextIndex找到重复项,或者一旦nextIndex超出数组范围,就会中断:


const arr = [5, 4, 9, 3, 1, 6, 2];

let count = 0;

let nextIndex = 0;

const usedIndicies = new Set();

do {

  usedIndicies.add(nextIndex);

  nextIndex = arr[nextIndex];

  count++;

} while (!usedIndicies.has(nextIndex) && nextIndex < arr.length);

console.log(count);


查看完整回答
反对 回复 2021-07-08
  • 3 回答
  • 0 关注
  • 282 浏览
慕课专栏
更多

添加回答

举报

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