Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как найти ключи a hash?
Я знаю, что в javascript объекты удваиваются как хэши, но мне не удалось найти встроенную функцию для получения ключей
var h = {a:'b',c:'d'};
Я хочу что-то вроде
var k = h.keys() ; // k = ['a','c'];
Это просто написать функцию самостоятельно, чтобы перебирать элементы и добавлять ключи к массиву, который я возвращаю, но есть ли стандартный более чистый способ сделать это?
Я все время чувствую, что это должно быть простая встроенная функция, которую я пропустил, но я не могу ее найти!
В современном JavaScript (ECMAScript 5) есть функция под названием Object.keys , выполняющая эту операцию:
var obj = { "a" : 1, "b" : 2, "c" : 3};
alert(Object.keys(obj)); // will output ["a", "b", "c"]
Подробности совместимости можно найти здесь .
На сайте Mozilla также есть сниппет для обратной совместимости:
if(!Object.keys) Object.keys = function(o){
if (o !== Object(o))
throw new TypeError('Object.keys called on non-object');
var ret=[],p;
for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
return ret;
}
Для производственного кода, требующего большой совместимости с клиентскими браузерами, я все еще предлагаю ответ Ивана Невоструева выше с оболочкой для обеспечения Object.keys в старых браузерах. Тем не менее, можно получить точную функциональность, запрошенную с помощью новой функции ECMA defineProperty .
Как из ECMAScript 5 - Object.defineProperty
Начиная с ECMA5, вы можете использовать Object.defineProperty() для определения неисчисляемых свойств. Текущая совместимость все еще имеет много желаний, но в конечном итоге она должна стать доступной во всех браузерах. (В частности, обратите внимание на текущую несовместимость с IE8!)
Object.defineProperty(Object.prototype, 'keys', {
value: function keys() {
var keys = [];
for(var i in this) if (this.hasOwnProperty(i)) {
keys.push(i);
}
return keys;
},
enumerable: false
});
var o = {
'a': 1,
'b': 2
}
for (var k in o) {
console.log(k, o[k])
}
console.log(o.keys())
# OUTPUT
# > a 1
# > b 2
# > ["a", "b"]
Однако, поскольку ECMA5 уже добавил Object.keys , вы можете также использовать:
Object.defineProperty(Object.prototype, 'keys', {
value: function keys() {
return Object.keys(this);
},
enumerable: false
});
Оригинальный ответ
Object.prototype.keys = function ()
{
var keys = [];
for(var i in this) if (this.hasOwnProperty(i))
{
keys.push(i);
}
return keys;
}
Edit: поскольку этот ответ уже некоторое время существует, я оставлю вышеизложенное нетронутым. Любой, кто читает это, должен также прочитать ответ Ивана Невоструева ниже.
Нет никакого способа сделать прототипные функции неисчисляемыми, что приводит к тому, что они всегда оказываются в циклах for-in, которые не используют hasOwnProperty . Я все еще думаю, что этот ответ был бы идеальным, если бы расширение прототипа объекта не было таким беспорядочным.
Вы можете использовать Underscore.js, который является служебной библиотекой Javascript.
_.keys({one : 1, two : 2, three : 3});
// => ["one", "two", "three"]
используя jQuery вы можете получить ключи вот так:
var bobject = {primary:"red",bg:"maroon",hilite:"green"};
var keys = [];
$.each(bobject, function(key,val){ keys.push(key); });
console.log(keys); // ["primary", "bg", "hilite"]
Или:
var bobject = {primary:"red",bg:"maroon",hilite:"green"};
$.map(bobject, function(v,k){return k;});
благодаря @pimlottc
если вы пытаетесь получить только элементы, но не функции, то этот код может помочь вам
this.getKeys = function() {
var keys = new Array();
for(var key in this) {
if( typeof this[key] !== 'function') {
keys.push(key);
}
}
return keys;
}
это часть моей реализации HashMap, и мне нужны только ключи, this -это объект hashmap, содержащий ключи