Javascript: использовать объект массива через stringname

#javascript #object #javascript-objects

#javascript #объект #javascript-объекты

Вопрос:

нравится этот объект,

 var myColumnDefs = [
    {key:"label", sortable:true, resizeable:true},
    {key:"notes", sortable:true,resizeable:true},......
  

Я могу вызвать object как этот метод, который он работает

 ...
    myColumnDefs.key
    ...
  

но как вызвать этот объект с помощью Stringname, например

 function myObject (string) {
    return myColumnDefs.Stringname

}
alert(myObject('key'));
alert(myObject('sortable'));
  

спасибо за помощь

Комментарии:

1. Является ли myColumnDefs объектом или массивом объектов?

Ответ №1:

Вы должны использовать myColumnDefs[Stringname] Вот рабочая скрипка, и в вашем случае вы должны получить элемент с помощью myColumnDefs[element_index][Stringname]

Ответ №2:

Прежде всего, я не думаю, что это сработает:

myColumnDefs.key;

Вы должны ссылаться на один из элементов в массиве:

myColumnsDefs[0].key;

Имея это в виду, вы можете ссылаться на свойство по его строковому имени, делая это:

myColumnsDefs[0]['key'];

Комментарии:

1. @cerbrus. Это была опечатка. Отвечать по телефону сложно. Я пытаюсь показать, как индексировать объект по его имени. Я думаю, что это отвечает на вопрос. Не так ли?

2. Итак, вы случайно ввели ( вместо [ сразу после [0] ?.. Так лучше…

3. Я не уверен, отвечает ли это на вопрос, поскольку вопрос расплывчатый, но, по крайней мере, код работает 🙂 -1 удалено.

4. 1 Он отвечает на вопрос, а также предоставляет информацию о неправильной индексации, поэтому идет дальше.

Ответ №3:

Есть 2 способа сделать это. Один из способов — изменить массив на объект со свойствами, где имя ключа является свойством. Другой способ — выполнить поиск по всему массиву и найти ключ с правильным именем. Я бы предложил первый способ, чтобы код выглядел следующим образом:

var keyHolder = {};

 for(var i = 0; i < myColumnDefs.length; i   ) {
  if(!keyHolder.hasOwnProperty(myColumnDefs[i].key)) {
    keyHolder[myColumnDefs[i].key = {
      sortable: myColumnDefs[i].sortable,
      resizeable: myColumnDefs[i].resizeable
    }
  }
}
  

Затем вы можете сделать это:

 keyHolder.label
  

Надеюсь, это поможет.