Исправить исключение NullReferenceException можно с помощью Null-условных операторов в c # 6 и написать меньше кода для обработки нулевых проверок.
Он используется для проверки нуля до выполнения доступа к члену (?. ) или index (? [).
Пример
var name = p?.Spouse?.FirstName;
эквивалентен:
if (p != null)
{
if (p.Spouse != null)
{
name = p.Spouse.FirstName;
}
}
В результате имя будет нулевым когда p равно null или когда p.Spouse имеет значение null.
В противном случае имени переменной будет присвоено значение p.Spouse.FirstName.
Для получения дополнительной информации: Операторы с нулевым условием
Если вы хотите получить все ключи, ECMAScript 5 представил Object.keys
. Это поддерживается только более новыми браузерами, но MDC-документация предоставляет альтернативную реализацию (которая также использует for...in
btw):
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;
}
Конечно, если вы хотите оба, ключ и значение, тогда for...in
является единственным разумным решением.
// iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}
Обратитесь к MDN
С учетом вашего объекта:
var foo = { 'bar' : 'baz' }
Чтобы получить bar
, используйте:
Object.keys(foo)[0]
Чтобы получить baz
, используйте:
foo[Object.keys(foo)[0]]
Предполагая, что один объект
Поскольку вы упомянули $.each()
, вот удобный подход, который будет работать в jQuery 1.6 +:
var foo = { key1: 'bar', key2: 'baz' };
// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
return key;
});
Нет другого способа, кроме for ... in
. Если вы не хотите использовать это (возможно, потому что он неэффективен для тестирования hasOwnProperty
на каждой итерации?), То используйте другую конструкцию, например. массив kvp's:
[{ key: 'key', value: 'value'}, ...]
Object.keys () Метод Object.keys () возвращает массив собственных перечислимых свойств данного объекта в том же порядке, что и для цикла for ... in (разница заключается в том, что for-in loop также перечисляет свойства в цепочке прототипов).
var arr1 = Object.keys(obj);
Object.values () Метод Object.values () возвращает массив собственных значений перечислимого свойства данного объекта в том же порядке, что и что обеспечивается циклом for for ... in (разница заключается в том, что цикл for-in также перечисляет свойства в цепочке прототипов).
var arr2 = Object.values(obj);
Для получения дополнительной информации см. здесь
использовать для каждого цикла для доступа к ключам в Object или Maps в javascript
for(key in foo){
console.log(key);//for key name in your case it will be bar
console.log(foo[key]);// for key value in your case it will be baz
}
Примечание: вы также можете использовать
Object.keys (foo);
blockquote>он даст вам такой результат:
[bar];
для показа в виде строки, просто используйте:
console.log("they are: " + JSON.stringify(foo));
Вы должны перебирать внутри объекта с помощью цикла for:
for(var i in foo){
alert(i); // alerts key
alert(foo[i]); //alerts key's value
}
Или
Object.keys(foo)
.forEach(function eachKey(key) {
alert(key); // alerts key
alert(foo[key]); // alerts value
});
Это самый простой и простой способ. Так мы это делаем.
var obj = { 'bar' : 'baz' }
var key = Object.keys(obj)[0];
var value = obj[key];
console.log("key = ", key) // bar
console.log("value = ", value) // baz
Ну $.each
является библиотечной конструкцией, тогда как for ... in
является нативной js, что должно быть лучше
Я не вижу ничего, кроме for (var key in foo)
.
Самый простой способ - просто использовать Underscore.js:
keys
_. keys (object) Извлечь все имена свойств объекта.
_. ключи ({один: 1, два: 2, три: 3}); => ["one", "two", "three"]
blockquote>Да, вам нужна дополнительная библиотека, но это так просто!
A один вкладыш для вас:
const OBJECT = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'key4': 'value4'
};
const value = 'value2';
const key = Object.keys(OBJECT)[Object.values(OBJECT).indexOf(value)];
window.console.log(key); // = key2
Вы можете получить доступ к каждой клавише индивидуально без повторения, как в:
var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second