Поиск имени элемента массива [дубликат]

Исправить исключение 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.

Для получения дополнительной информации: Операторы с нулевым условием

124
задан melhosseiny 7 June 2011 в 17:47
поделиться

16 ответов

Если вы хотите получить все ключи, 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 является единственным разумным решением.

68
ответ дан Felix Kling 28 August 2018 в 16:41
поделиться
// 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

5
ответ дан aiffin 28 August 2018 в 16:41
поделиться

С учетом вашего объекта:

var foo = { 'bar' : 'baz' }

Чтобы получить bar, используйте:

Object.keys(foo)[0]

Чтобы получить baz, используйте:

foo[Object.keys(foo)[0]]

Предполагая, что один объект

41
ответ дан Aryeh Beitz 28 August 2018 в 16:41
поделиться
13
ответ дан Chris 28 August 2018 в 16:41
поделиться

Поскольку вы упомянули $.each(), вот удобный подход, который будет работать в jQuery 1.6 +:

var foo = { key1: 'bar', key2: 'baz' };

// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
  return key;
});
3
ответ дан Dave Ward 28 August 2018 в 16:41
поделиться

Нет другого способа, кроме for ... in. Если вы не хотите использовать это (возможно, потому что он неэффективен для тестирования hasOwnProperty на каждой итерации?), То используйте другую конструкцию, например. массив kvp's:

[{ key: 'key', value: 'value'}, ...]
4
ответ дан Jamie Treworgy 28 August 2018 в 16:41
поделиться

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);

Для получения дополнительной информации см. здесь

2
ответ дан jesusverma 28 August 2018 в 16:41
поделиться

использовать для каждого цикла для доступа к ключам в 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);

он даст вам такой результат:

[bar];

2
ответ дан jitendra varshney 28 August 2018 в 16:41
поделиться

для показа в виде строки, просто используйте:

console.log("they are: " + JSON.stringify(foo));
0
ответ дан Jiulong Zhao 28 August 2018 в 16:41
поделиться

Вы должны перебирать внутри объекта с помощью цикла 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
  });
128
ответ дан Michael Benin 28 August 2018 в 16:41
поделиться

Это самый простой и простой способ. Так мы это делаем.

var obj = { 'bar' : 'baz' }
var key = Object.keys(obj)[0];
var value = obj[key];
     
 console.log("key = ", key) // bar
 console.log("value = ", value) // baz

2
ответ дан Must keem 28 August 2018 в 16:41
поделиться

Ну $.each является библиотечной конструкцией, тогда как for ... in является нативной js, что должно быть лучше

1
ответ дан Neal 28 August 2018 в 16:41
поделиться

Я не вижу ничего, кроме for (var key in foo).

7
ответ дан patapizza 28 August 2018 в 16:41
поделиться

Самый простой способ - просто использовать Underscore.js:

keys

_. keys (object) Извлечь все имена свойств объекта.

_. ключи ({один: 1, два: 2, три: 3}); => ["one", "two", "three"]

Да, вам нужна дополнительная библиотека, но это так просто!

4
ответ дан samnau 28 August 2018 в 16:41
поделиться

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
1
ответ дан Theone Lucas 28 August 2018 в 16:41
поделиться

Вы можете получить доступ к каждой клавише индивидуально без повторения, как в:

var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second
74
ответ дан user01 28 August 2018 в 16:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: