Я знаю, что элементы в Map могут быть перебраны в порядке вставки.
Предположим, у нас есть эта карта:
const a = new Map();
a.set('x', 5);
a.set('y', 10);
a.set('z', 5);
И мы хотим найти первый элемент в a
со значением 5
, а затем следующий элемент с таким же значением 5
.
// el will be 5, 10, 5...
for(const el of a) {
if(el === 0) {
// How can I iteratate over `a` starting from index(el) + 1
for (??) {}
}
}
Если бы вместо этого я использовал Array
, мы могли бы сделать что-то вроде (игнорируя ключи):
const a = new Array(5, 10, 5);
for(let i = 0; i < a.length; ++i) {
if(a[i] === 5) {
// Here I can start iterating from i + 1
for(let j = i + 1; j < a.length; ++j) {
a[j] === 5 && console.log('FOUND!');
}
}
}
Я не очень знаком с iterators
, но я думаю, что должно быть как-то возможно начать итерацию с определенного элемента на карте.
const x = a.get('x');
// iterate over Map `a` starting from the element that comes after x
Одно из решений, которое меня не особенно радует, - это получать копии ключей или записей каждый раз, когда мы выполняем операцию const elements = a.entries()
, поэтому мы могли бы быстро выполнить итерацию по ней, но она использует много дополнительных память.