使用变量作为对象名称并将数组推送到对象

时间:2017-05-29 05:50:28

标签: javascript jquery arrays wordpress object

我正在构建一个WordPress插件,允许用户重新创建WordPress管理菜单。 WordPress提供了一个名为global $submenu;的全局变量,它包含菜单的所有子菜单项。所以我开发了一个Javascript界面​​,允许人们编辑这个菜单。所以我需要做的是让用户编辑并将其推回到该全局变量中。

当我将此变量输出到javascript控制台时,我得到一个类似的结构:

    Object {index.php: Object, upload.php:Object}

      index.php: Object
        0: Array(3)
        0: "Home"
        1: "read"
        2: "index.php"

      10: Array(3)
        0: "Updates"
        1: "update_core"
        2: "update-core.php"
    
      upload.php: Object
        5: Array(3)
        0: "Library"
        1: "upload_files"
        2: "upload.php"

      10: Array(3)
        0: "Add New"
        1: "upload_files"
        2: "media-new.php"

这是一个缩短的输出示例,只是为了给你一个想法。所以它包含一个包含2个对象的对象,这2个对象各包含2个数组(这2个对象名是与相关顶级菜单项匹配的索引值,数组中的值是子属性菜单项)。

所以在Javascript中我有一个循环收集这些对象名称,即index.php和upload.php,然后我在该循环中有一个循环,它收集对象子菜单属性:

$('#admin-menu-manager > li > ul').each(function(index) {
  //this gets the object name e.g. index.php or upload.php    
  var associatedTopLevelMenuItemLabel = $(this).parent().find('.menu-url').val();

  var $this = $(this);
  var $subLevelUl = $(this).find("li");

  $($subLevelUl).each(function(index) {
    //these below variables get the properties of the sub menu
    //menu item property 1
    var subLevelMenuItemLabel = $(this).find('.menu-label').val();
    //menu item property 2
    var subLevelMenuItemCapability = $(this).find('.menu-capability').val();
    //menu item property 3
    var subLevelMenuItemLink = $(this).find('.menu-url').val();
    //now I am creating an array to store the sub level properties
    var subLevelMenuItemArray = [subLevelMenuItemLabel, subLevelMenuItemCapability, subLevelMenuItemLink];

  });

});

此代码的问题是: a)我不知道如何创建一个使用变量'associatedTopLevelMenuItemLabel'作为其名称的对象,以及 b)我不知道如何将这些'subLevelMenuItemArray'数组推送到对象中。

我知道如何将数组推入另一个数组,但我相信你不能将数组推入这个对象。是我试图在Javascript中做什么,或者我在这里咆哮错误的树,我应该使用PHP?

1 个答案:

答案 0 :(得分:0)

感谢anete.anetes的评论。我认为在这种情况下,我试图非常重视事情。因为我实际上不需要创建真正的数组或对象,所以我实际上应该只是尝试创建对象的字符串表示。所以我可以用我现有的循环创建一个简单的变量和广告到该变量。然后,如果需要,访问该字符串的这些属性。