【问题标题】:Getting data out of a HUGE Array从一个巨大的数组中获取数据
【发布时间】:2017-01-18 06:02:16
【问题描述】:

首先,这是我的数组代码(稍后解释):

var UserProfiles = [{
    userProfileID: 1,
    firstName: 'Austin',
    lastName: 'Hunter',
    email: 'test',
    token: '',
    platform: 'android',
    password: 'incorrect',
    companyProfileID: 1,
    UserTopics: [{
        topicID: 1,
        topicName: 'Needs Maintenance',
        alertLevel: 'Urgent',
        TopicDepartments: [{
            departmentID: 1,
            departmentName: 'Shop',
            required: true,
            DepartmentUsers: [{
                userProfileID: 1,
                firstName: 'Austin',
                lastName: 'Hunter',
                email: 'test',
                token: '',
                platform: 'android',
                companyProfileID: 1
            }]
        }]
    }]
}];

那么什么是用户配置文件?它是一个包含许多用户配置文件的数组。每个配置文件将有多个 UserTopics,每个 UserTopics 将有多个 TopicDepartment。所以一个数组一个数组一个数组......令人兴奋。 它将如何填充?好吧,它将使用离子注册应用程序进行填充,该应用程序将发布到服务器并插入到该数组中。但这不是我的问题。 我的问题是什么?所以我在我的应用程序中拥有的是我发布的代码。我有一个个人资料,比如说 UserProfiles[0]。我需要在每个索引处获取 UserTopics topicName。但我不确定如何将每一个都取出并将其放入我的应用程序的下拉菜单中。

我有一个

<select ng-model="selectSubject" ng-change="changedValue(selectSubject)" data-ng-options="option.subject for option in subject">
					<option value="" disabled>Select a Subject</option>
				</select>

从存储中获取用户配置文件并需要获取所有 UserTopics.topicName 的关联。

我知道我在解释我的问题方面做得很糟糕。但我真的需要一些帮助,和我一起工作,我可以帮助解释。

【问题讨论】:

  • 你的意思是说每个对象里面会有多个UserTopics
  • Inside UserProfiles = [] 会有多个用户。每个用户都有一个 UserTopics 对象。每个 UserTopics 对象将有多个主题,每个主题将有多个 TopicDepartment。最后但并非最不重要的一点是,每个部门将有多个部门用户。我知道这很令人困惑,但它实际上是适合我的情况的绝佳数据模型。
  • 你的对象结构是一场灾难。
  • 在不了解整个项目上下文的情况下,我不会假设这一点。所以感谢您的意见。

标签: javascript html angularjs arrays


【解决方案1】:

html 是:

<select id="topic_name"></select>

现在的JS如下:

for(var i=0;i<UserProfiles.length;i++)
{
   var profile=UserProfiles[i];         //getting a profile

   var topic=profile.UserTopics;        //getting UserTopics array

   for(var j=0;j<topic.length;j++)
   {
      var topicname=topic[j].topicName;    //getting each topic name

      var topicdept=topic[j].TopicDepartments   //getting array of topic departments

       //now if you want more depth in topicdept array go on in same way

       html=html+"<option>"+topicname+"</option>";    //generating the dropdown list for topicname
   } 
}

$("#topic_name").html(html);

【讨论】:

  • 我不断收到一个找不到 $ 变量。
  • 好的,你需要先添加jquery库。
  • 或者使用 document.getElementById("#topic_name").innerHTML=html 代替 $("#topic_name").html(html)。
【解决方案2】:

如果您要从数组中的对象中提取数据,您正在寻找的方法是.map(),或者如果您正在遍历数组中的对象并将它们推送到其他地方,那么您正在寻找的方法是.forEach()。两者都将函数作为参数。您可以为每个配置文件设置别名,然后从中提取您想要的任何数据。具体来说:

var topics = [];

UserProfiles.forEach(function(profile){
    profile.UserTopics.forEach(function(topic) {
        topics.push(topic.topicName);
    });
});

祝你好运!

编辑:重构以便添加数组中的所有主题。

【讨论】:

    【解决方案3】:

    试试怎么样:

    <select ng-model="selectedTopic" 
            ng-options="userTopic as userTopic.topicName for userTopic in selectedUser.UserTopics track by userTopic.topicId">
    </select>
    

    这遵循“select as label for value in array”。

    这意味着ngModel将被分配为select表达式,选择选项将显示为label表达式。

    【讨论】:

      【解决方案4】:

      希望这个 sn-p 有用。避免使用嵌套的 json 对象。因为它需要嵌套循环

      UserProfiles.forEach(function(item, index) {
        var getUserTopics = item.UserTopics;
        getUserTopics.forEach(function(userTopicItem, userTopicIndex){
          var getTopicName = userTopicItem.topicName;
          document.write('<pre>' + item.firstName + "--" + getTopicName + '</pre>')
        })
      })
      

      JSFIDDLE

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 2016-03-14
        • 2016-03-22
        • 1970-01-01
        相关资源
        最近更新 更多