使用 JavaScript 在地图对象中查找索引

问题描述 投票:0回答:1

如果我们想在对象数组中查找索引,这非常简单。下面的例子

let a = [
  {prop1:"abc",prop2:"qwe"},
  {prop1:"bnmb",prop2:"yutu"},
  {prop1:"zxvz",prop2:"qwrq"}];
    
let index = a.findIndex(x => x.prop2 ==="yutu");

console.log(index);

我有一个地图对象,如下所示

let input = new Map([
    [ 
      "gfg4343434333r",
      { "group": 1, "groupId": "ae027a9e56a2" }
    ],
    [ 
       "5ae027a9e56a2",
        { "group": 2, "groupId": "434346456454" }
    ],
    [ 
        "de027a9e56a2",
        { "group": 3, "groupId": "43343vvfbrrt4445" }
    ],
])

正如你所看到的,这个地图对象有一个键值对。假设我有一个

input2
作为
5ae027a9e56a2
我需要找出哪个键与这个
input2
匹配并获取它在
input
中的位置。在这种情况下
5ae027a9e56a2
与第二个元素匹配。一旦匹配,我想知道索引,以便我可以向上一级并获取其前一个元素值。

在这种情况下如何找到地图对象中的索引以及如何到达索引1?有人可以在这里解释一下吗?

javascript arrays json loops dictionary
1个回答
0
投票

如果您正在处理“原始”输入(例如 JSON 数据),则它不应该位于

Map
中。

你可以在侧面建立一个索引查找的“键”

Map
,可以用来加速索引检查。

const input = [
  ["gfg4343434333r", {
    "group": 1,
    "groupId": "ae027a9e56a2"
  }],
  ["5ae027a9e56a2", {
    "group": 2,
    "groupId": "434346456454"
  }],
  ["de027a9e56a2", {
    "group": 3,
    "groupId": "43343vvfbrrt4445"
  }],
]

// Build a lookup map of "key" to index
const keyToIndex = input.reduce((m, [k], i) => m.set(k, i), new Map)

console.log(getPreviousIndex('gfg4343434333r')) // -1
console.log(getPreviousIndex('5ae027a9e56a2'))  //  0
console.log(getPreviousIndex('de027a9e56a2'))   //  1

function getPreviousIndex(key) {
  let previousIndex = keyToIndex.get(key) - 1
  return previousIndex >= 0 ? previousIndex : -1
}

© www.soinside.com 2019 - 2024. All rights reserved.