javascript 从Map中获取最后一个项目-一个简单的解决方案?

taor4pac  于 2023-03-28  发布在  Java
关注(0)|答案(7)|浏览(1035)

我找到了一些建议遍历Map的答案,将迭代的元素设置为一个变量,然后在迭代后阅读它。但是没有更好,更优雅的视图吗?到目前为止,我找不到更好的解决方案。

kgqe7b3p

kgqe7b3p1#

您可以将Map转换为一个条目数组,然后获取最后一个元素。

const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
let lastEntry = [...map].at(-1);
console.log(lastEntry);

// or only get last key/value
let lastKey = [...map.keys()].at(-1);
let lastValue = [...map.values()].at(-1);
console.log(lastKey, lastValue);

但是,更有效的方法是只迭代条目并保留最后一个条目。

const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
let entry; for (entry of map);
console.log(entry);
b5buobof

b5buobof2#

使用Array.from()方法将Map转换为数组,然后使用数组索引访问最后一项。

// Convert Map to an array and get the last item
const myArray = Array.from(myMap);
const lastItem = myArray[myArray.length - 1];

// Log the last item to the console
console.log(lastItem);

你可以通过访问数组索引[myArray.length - 1来获取最后一项]

xesrikrc

xesrikrc3#

使用内置的Map,除了迭代条目并返回最后一个条目之外别无他法。但是,您可以扩展Map,以便它可以记录自己的“历史”,例如:

class MapWithHistory extends Map {
    history = []

    set(key, val) {
        this.history.push(key)
        return super.set(key, val)
    }
}

m = new MapWithHistory()

m.set('foo', 123)
m.set('bar', 456)
m.set('baz', 789)

lastKey = m.history.at(-1)

console.log(lastKey)
vlju58qv

vlju58qv4#

const inputMap = new Map([
  ['k1', 'v1'],
  ['k2', 'v2'],
  ['k3', 'v3']
]);

const lastEntry = [...inputMap.entries()].pop();
console.log(lastEntry);
y0u0uwnf

y0u0uwnf5#

使用spread运算符将贴图转换为数组并使用.pop

const inputMap = new Map([
  ['k1', 'v1'],
  ['k2', 'v2'],
  ['k3', 'v3']
]);

const lastEntry = [...inputMap].pop();
console.log(lastEntry);
bakd9h0s

bakd9h0s6#

不,没有。Map不是一个有序的数据结构,因为它们支持索引访问-它们所拥有的只是一个确定的迭代顺序。如果你关心控制元素的顺序或通过索引访问它们,请使用数组(可能是除了Map之外)。
在优雅方面,我推荐一个接受迭代器的helper函数:

function last(iterator) {
  let element;
  for (element of iterator) {}
  return element;
}

然后称之为

last(map.values())

last(map.entries())
ljsrvy3e

ljsrvy3e7#

您可以直接迭代Map,并使用size中的计数器来获取最后一对。

const
    map = new Map([['k1', 'v1'], ['k2', 'v2'], ['k3', 'v3'], ['k4', 'v4']]),
    last = [];

let s = map.size;
map.forEach((k, v) => {
    if (!--s) last.push(k, v);
});

console.log(last);

相关问题