Подтвердить что ты не робот

Хеш-ключи/значения как массив

Я не могу найти эквивалент javascript для php array_keys()/array_values()

Для людей, незнакомых с php, указан следующий хэш js:

var myHash = {"apples": 3, "oranges": 4, "bananas": 42}

Как я могу получить массив ключей, т.е.

["apples", "oranges", "bananas"]

Тот же вопрос со значениями, т.е.

[3, 4, 42]

Можно использовать jQuery.

4b9b3361

Ответ 1

var a = {"apples": 3, "oranges": 4, "bananas": 42};    

var array_keys = new Array();
var array_values = new Array();

for (var key in a) {
    array_keys.push(key);
    array_values.push(a[key]);
}

alert(array_keys);
alert(array_values);

Ответ 2

В ES5 поддерживаемых (или подгоняемых) браузерах...

var keys = Object.keys(myHash);

var values = keys.map(function(v) { return myHash[v]; });

Прокладки из MDN...

Ответ 3

Второй ответ (на момент написания) дает:

var values = keys.map(function(v) { return myHash[v]; });

Но я предпочитаю использовать jQuery собственный $.map:

var values = $.map(myHash, function(v) { return v; });

Так как jQuery выполняет кросс-браузерную совместимость. Плюс он короче:)

Во всяком случае, я всегда стараюсь быть максимально функциональным. Однострочники - это приятнее, чем циклы.

Ответ 5

function getKeys(obj){
    var keys = [];
    for (key in obj) {
        if (obj.hasOwnProperty(key)) { keys[keys.length] = key; }
    } 
    return keys;
}

Ответ 6

Не знаю, помогает ли это, но "foreach" проходит через все клавиши: for (ключ var в obj1) {...}

Ответ 7

Вот реализации из phpjs.org:

Это не мой код, я просто указываю вам на полезный ресурс.

Ответ 8

Вот хороший пример array_keys из PHP.js library:

function array_keys (input, search_value, argStrict) {
    // Return just the keys from the input array, optionally only for the specified search_value

    var search = typeof search_value !== 'undefined',
        tmp_arr = [],
        strict = !!argStrict,
        include = true,
        key = '';

    for (key in input) {
        if (input.hasOwnProperty(key)) {
            include = true;
            if (search) {
                if (strict && input[key] !== search_value) {
                    include = false;
                }
                else if (input[key] != search_value) {
                    include = false;
                }
            }

            if (include) {
                tmp_arr[tmp_arr.length] = key;
            }
        }
    }

    return tmp_arr;
}

То же самое относится к array_values (из той же библиотеки PHP.js):

function array_values (input) {
    // Return just the values from the input array  

    var tmp_arr = [],
        key = '';

    for (key in input) {
        tmp_arr[tmp_arr.length] = input[key];
    }

    return tmp_arr;
}

EDIT: Удалены ненужные предложения из кода.

Ответ 9

var myHash = {"apples": 3, "oranges": 4, "bananas": 42}
vals=(function(e){a=[];for (var i in e) a.push(e[i]); return a;})(myHash).join(',')
keys=(function(e){a=[];for (var i in e) a.push(  i ); return a;})(myHash).join(',')
console.log(vals,keys)

в основном

array=(function(e){a=[];for (var i in e) a.push(e[i]); return a;})(HASHHERE)