How do you get the key at specifc index in javascr

2020-02-09 12:38发布

问题:

Suppose I have the following map object

const items = new Map([['item1','A'], ['item2','B'], ['item3', 'C']])

I want to fetch the key at index 2. Is there a way other than using a for loop to get the key of item at index = 2 ?

Got this working as per the answer -

Array.from(items.keys())[2]

回答1:

Maps might be ordered, but they are not indexed. The only way to get the nth item is a loop.



回答2:

To fetch the key at index 2, do the following:

// Your map
var items = new Map([['item1','A'], ['item2','B'], ['item3', 'C']]);

// The key at index 2
var key = Array.from(items.keys())[2];                 // Returns 'item3'

// The value of the item at index 2
var val1 = items.get(key);                             // Returns 'C'


// ... or ...
var val2 = items.get(Array.from(items.keys())[2]);     // Returns 'C'


回答3:

Here is a more comprehensive solution that doesn't pointlessly copy all of the values into an array:

function get_nth_key<K, V>(m: Map<K, V>, n: number): K | undefined {
  if (n < 0) {
    return undefined;
  }
  const it = m.keys();
  for (;;) {
    const res = it.next();
    if (res.done) {
      return undefined;
    }
    if (n <= 0) {
      return res.value;
    }
    --n;
  }
}

const m = new Map<string, string>([['item1', 'A'], ['item2', 'B'], ['item3', 'C']]);

console.log(get_nth_key(m, -1));
console.log(get_nth_key(m, 0));
console.log(get_nth_key(m, 1));
console.log(get_nth_key(m, 2));
console.log(get_nth_key(m, 3));

Output:

undefined
item1
item2
item3
undefined


回答4:

const a = new Map([['1 Item', 'abc'], ['2 Item', 'def']]);
let indexVal =   [...a][1];
console.log(indexVal);