хэш-ключи / значения в виде массива [дубликат]
этот вопрос уже есть ответ здесь:
- Как найти ключи хэша? 9 ответов
Я не могу найти javascript эквивалент php array_keys()
/array_values()
для людей незнакомых с php дан следующий JS хэш:
var myHash = {"apples": 3, "oranges": 4, "bananas": 42}
как я могу получить массив ключей, то есть
["apples", "oranges", "bananas"]
тот же вопрос со значениями, т. е.
[3, 4, 42]
jQuery может быть использован.
9 ответов:
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);
в ES5 поддерживается (или shimmed) - браузеры...
var keys = Object.keys(myHash); var values = keys.map(function(v) { return myHash[v]; });
прокладки от MDN...
второй ответ (на момент написания) дает :
var values = keys.map(function(v) { return myHash[v]; });
но я предпочитаю использовать собственный jQuery
$.map
:var values = $.map(myHash, function(v) { return v; });
С помощью jQuery заботится о кросс-браузерной совместимости. Плюс это короче :)
во всяком случае, я всегда стараюсь быть максимально функциональным. Однострочные лучше, чем петли.
function getKeys(obj){ var keys = []; for (key in obj) { if (obj.hasOwnProperty(key)) { keys[keys.length] = key; } } return keys; }
вот реализации из phpjs.org:
Это не мой код, я просто указываю вам на полезный ресурс.
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)
вот хороший пример
array_keys
С PHP.библиотека js: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: удалены ненужные предложения из кода.