LINUX.ORG.RU

Переход к следующему элементу в большом массиве.

 , ,


0

1

Есть массив ключ-текст. Как мне без прохода всего массива перейти к следующему элементу, если там ключи идут не по порядку.

То есть например
...
3
1354
23235
23
456
36225
...
это все можно обойти так
for(var i in array)
{
       console.log(array);
}
Но хотелось бы сразу переходить от 456 к 36225 например и дальше без полного прохода.

★★

Последнее исправление: CYB3R (всего исправлений: 2)

так толсто что даже тонко

punya ★★
()

гугли про b-tree и hashmap

если хочется примитивно то

var o = {};
o[12344]=somveValue

return o[12344];

Deleted
()
Ответ на: комментарий от resurtm

Погуглю, спасибо. Изначально хотел так, но тогда думалось что там было проще массивом. Сейчас несколько задача изменилась в этом месте.

Bupyc ★★
() автор топика
Ответ на: комментарий от resurtm

А... не не не. Мне не подойдет, т.к. надо прыгать по ключу. То есть надо предположить, что у меня может быть перескок от 10 элемента к 50. Я думаю сделаю массив у которого будет внутри ID предыдущего и ID следующего.

Bupyc ★★
() автор топика

Так массив у тебя, или объект? В любом случае, Object.keys()

Kalashnikov ★★★
()
Ответ на: комментарий от Bupyc

Я думаю сделаю массив у которого будет внутри ID предыдущего и ID следующего.

А почему не тупо ссылка на предыдущий и следующий?

resurtm ★★★
()
Ответ на: комментарий от resurtm

Мне было важно знать именно ключ.

Bupyc ★★
() автор топика

Как вариант (на больших наборах не тестировал) -

(function () {
    var getKeys = ('keys' in Object.prototype) ? Object.keys : function(object) {
            var keys = [],
                    property;

            for (property in object) {
                if (object.hasOwnProperty(property)) {
                    keys.push(property);
                }
            }

            return keys;
        },
        eachFrom = function (object, fromKey, fn, scope) {
            var keys = getKeys(object),
                start = keys.indexOf(fromKey),
                i,
                len;

            if (-1 !== start) {
                len = keys.length;
                for (i = start; i < len; i++) {
                    if (fn.call(scope || object, keys[i], object[keys[i]], object) === false) {
                        return;
                    }
                }
            }
        };

    Object.prototype.getKeys = function () {
        return getKeys(this);
    };

    Object.prototype.eachFrom = function (fromKey, fn, scope) {
        return eachFrom(this, fromKey, fn, scope);
    };
})();

var testObj = {
    3: '1',
    1354: '2',
    23235: '3',
    23: '4',
    456: '5',
    36225: '6'
};

testObj.eachFrom('23', function (key, value) {
    console.log('%s => %s', key, value);
});

RR
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.