Создайте массив объектов, используя строку для имени, затем ссылаясь на массив строкой - PullRequest
0 голосов
/ 08 апреля 2020

Две проблемы, с которыми я борюсь:

  1. Создание новых массивов с использованием строк из другого массива.
  2. Ссылка на имя массива со строкой / переменной.

Для контекста я пытаюсь поместить список команд сотрудников в массив объектов, но слишком много сотрудников для максимального массива 100. Поэтому моя стратегия - создавать новые массивы, используя имена руководителей команд. Эти списки часто меняются (не так сильно, как у ТМ), но я бы хотел не заниматься обслуживанием.

Например, первый массив предназначен для Active Directory руководителей команд. Я могу получить это с помощью ajax get.

var arr_TMs = [jsmith, kjohnson, smichaels]

Поскольку ТМ могут меняться, я хочу создать новые массивы для каждой ТМ, используя arr_TM в качестве имен для самого массива

$.each( arr_TMs, function(i,v) {
    //here is issue #1
    var arr_ + v = []
})

Результаты будут примерно такими: arr_jsmith arr_kjohnson arr_smichaels

Я хочу использовать эти новые массивы для помещения объектов агентов в sh. У меня есть AD ТМ в Главном списке сотрудников, которому агент сообщает.

$.ajax({
     url: "mysite.ca/_api/web/lists/getbyTitle('Employee Master List')/items?$filter=JobTitle eq 'Agent'&$select=Name,Skill,TeamManager_AD",
     type: "GET",
     async: false,
     headers: {"accept":"application/json;odata=verbose"},
     success: function(data) {
          //here is #2 something like this:
          "arr_" + data.TeamManager_AD = data.d.results
     },
     error: function(err) {console.log(err)}
});

После этого синтаксиса я надеюсь получить эти массивы, на которые смогу ссылаться позже:

arr_jsmith [
   {Name: "James, Jesse", Skill: "Outlaw", TeamManagerAD: "jsmith"}
   {Name: "Mortenson, Norma", Skill: "Actress", TeamManagerAD: "jsmith"}
   {Name: "Dean, James", Skill: "Motorcycle", TeamManagerAD: "jsmith"}
]

//And so on....
arr_kjohnson [
   {Name: "Mortenson, Norma", Skill: "Actress", TeamManagerAD: "kjohnson"}
   {Name: "Mortenson, Norma", Skill: "Actress", TeamManagerAD: "kjohnson"}
]

arr_smichaels [
   {Name: "Mortenson, Norma", Skill: "Actress", TeamManagerAD: "smichaels"}
]

Но проблема № 2 возникает снова, если я хочу динамически ссылаться на имя массива, я думаю, что это что-то вроде этого:

If ($('#myinput').Value === jsmith) {
     var tmad = $('#myinput').Value

     //this I can't get to work:
     $.each(window["arr_" + tmad], function(i, v) {
          var empName = window['arr_' + tmad].Name
          var empSkill = window['arr_' + tmad].Skill
          console.log(empName + ' - ' + empSkill)
     });

}

Где результат будет:

"James, Jesse - Outlaw"
"Mortenson, Norma - Actress"
"Dean, James - Motorcycle"

Если, конечно, Вы знаете о гораздо более простом выражении этой цели. Цените ваше понимание этого.

1 Ответ

0 голосов
/ 08 апреля 2020

Я протестировал window[], и он работает с использованием new Array() для создания нового массива. Сначала я изменил свои arr_TM для включения имени ТМ:

arr_TMs(
   {"name":"Smith, John", "ActiveDirectory":"jsmith"}
   {"name":"Johnson, Kate", "ActiveDirectory":"kjohnson"}
   {"name":"Michaels, Sean", "ActiveDirectory":"smichaels"}
)

Затем я просто использовал $.each для создания «динамически» массивов:

var ad = '' //I declared this outside the loop so I can use it in the ajax later
$.each( arr_TMs, function(i,v) {
   ad = v.ActiveDirectory
   window["arr_" + ad] = new Array()
})

Теперь в $. ajax Я могу сделать то же самое

$.ajax({
    //minor change to my filter so that it only pulls for that TM
    //I added a filter with the and $filter=TeamManager eq 'ad' and JobTitle eq 'Agent'

    url: "mysite.ca/_api/web/lists/getbyTitle('Employee Master List')/items?$filter=TeamManger eq '" + ad + "' and JobTitle eq 'Agent'&$select=Name,Skill,TeamManager_AD",
    type: "GET",
    async: false,
    headers: {"accept":"application/json;odata=verbose"},
    success: function(data) {
         //#2 here
         window["arr_" + ad] = data.d.results
 },
 error: function(err) {console.log(err)}
});

Теперь я могу просто сослаться, используя тот же window["arr_" + ad], чтобы извлечь из любого из массивов.

var lookup = $("#myinput").value //value = jsmith
//as long as the value matches the Active Directory ex: jsmith `arr_jsmith`
console.log( window["arr_" + lookup] )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...