【问题标题】:Create a object array using string for the name then referencing array with string使用字符串作为名称创建对象数组,然后使用字符串引用数组
【发布时间】:2020-04-08 16:17:44
【问题描述】:

我正在努力解决的两个问题:

  1. 使用来自另一个数组的字符串创建新数组。
  2. 使用字符串/变量引用数组名称。

对于上下文,我正在尝试将员工团队列表放入对象数组中,但是对于 100 个最大数组来说,员工太多了。所以我的策略是使用团队经理的名字创建新数组。这些列表经常更改(不是 TM 的那么多),但我希望免于维护部分。

例如,第一个数组用于团队经理的 Active Directory。
我可以通过 ajax get 获取它。

var arr_TMs = [jsmith, kjohnson, smichaels]

因为 TM 可以更改,我想使用 arr_TMs 作为数组本身的名称为每个 TM 创建新数组

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

结果将类似于:
arr_jsmith
arr_kjohnson
arr_smichaels

我想使用这些新数组将代理的对象推入。
我在代理向其报告的员工主列表中有 TM 的 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"

当然,除非您知道这个目标的更简单的表达方式。
感谢您对此的见解。

【问题讨论】:

    标签: jquery arrays ajax sharepoint


    【解决方案1】:

    我测试了window[],它通过使用new Array() 创建一个新数组来工作。
    首先,我更改了我的 arr_TMs 以包含 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] )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多