Ответ 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);
Я не могу найти эквивалент javascript для php array_keys()
/array_values()
Для людей, незнакомых с php, указан следующий хэш js:
var myHash = {"apples": 3, "oranges": 4, "bananas": 42}
Как я могу получить массив ключей, т.е.
["apples", "oranges", "bananas"]
Тот же вопрос со значениями, т.е.
[3, 4, 42]
Можно использовать jQuery.
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 поддерживаемых (или подгоняемых) браузерах...
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 выполняет кросс-браузерную совместимость. Плюс он короче:)
Во всяком случае, я всегда стараюсь быть максимально функциональным. Однострочники - это приятнее, чем циклы.
посмотрите функции _.keys() и _.values () в lodash или подчеркивании
function getKeys(obj){
var keys = [];
for (key in obj) {
if (obj.hasOwnProperty(key)) { keys[keys.length] = key; }
}
return keys;
}
Не знаю, помогает ли это, но "foreach" проходит через все клавиши: for (ключ var в obj1) {...}
Вот реализации из phpjs.org:
Это не мой код, я просто указываю вам на полезный ресурс.
Вот хороший пример 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: Удалены ненужные предложения из кода.
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)