如何遍历数组/对象并将某些元素添加到 li?

How can I iterate over an array/object and add certain elements to an li?

提问人:TraktorJack 提问时间:4/19/2021 最后编辑:UnmitigatedTraktorJack 更新时间:4/19/2021 访问量:46

问:

这是我的第一个问题,所以如果它有点模糊,我们深表歉意。我正在学习JS,我已经在一个问题上卡住了几个小时。我得到了一个对象,并被告知将该对象中的某些对象添加到ul中。

{
"dsl": {  
"DSL-I-100000": {
    "DSL-I-100000": {      // Add this to an li  
        "priority": "1",  
            "standard": true,  
            "customer": true,  
            "internet": true,  
            "business": true,  
            "consumer": true,  
            "filename": "DSL-I-100000.json",  
            "download": "100",  
            "vpCategory": "dsli"  
    }
},  
"DSL-IP-100000": {  
    "DSL-IP-100000": {    // Add this to an li  
        "priority": "1",  
            "standard": true,
            "customer": true,
            "internet": true,
            "phone": true,
            "business": true,
            "consumer": true,
            "filename": "DSL-IP-100000.json",
            "download": "100",
            "vpCategory": "dslip"
    }
},  
"DSL-IP-16000": {    
    "DSL-IP-16000": {     // Add this to an li  
        "priority": "1",  
            "standard": true,
            "customer": true,
            "internet": true,
            "phone": true,
            "business": true,
            "consumer": true,
            "filename": "DSL-IP-16000.json",
            "download": "16",
            "vpCategory": "dslip"
    }
},

我的任务是创建一个包含“元代码”的列表,正如我的导师所说的那样。这将是 '“DSL-I-100000”:',“DSL-IP-100000”:, “DSL-IP-16000”:。最好的方法是什么?我的JS知识非常有限,所以请像向傻瓜一样解释。先谢谢你。

JavaScript 数组 ajax 对象 html 列表

评论

0赞 TraktorJack 4/19/2021
在打字时,对象格式正确且易于阅读,不知道为什么现在没有格式化......狡猾的家伙
1赞 TraktorJack 4/19/2021
@iota修复了我的格式。非常感谢
0赞 Lior Kaminsky 4/19/2021
你能粘贴预期的输出吗?我不确定我是否理解它应该是什么
0赞 TraktorJack 4/19/2021
嗨,@Lior。感谢您的关注:D我的预期输出是 *DSL-I-100000 *DSL-IP-100000 *DSL-IP-16000 我拥有的对象要大得多,我只把前三个输出放在这里,以大致了解我需要什么。因此,如果这有意义的话,我不能只针对这三个

答:

0赞 Som Shekhar Mukherjee 4/19/2021 #1

只需从中获取密钥,并为每个密钥创建一个元素。obj.dslli

const obj = {
  dsl: {
    "DSL-I-100000": {
      "DSL-I-100000": {
        priority: "1",
        standard: true,
        customer: true,
        internet: true,
        business: true,
        consumer: true,
        filename: "DSL-I-100000.json",
        download: "100",
        vpCategory: "dsli",
      },
    },
    "DSL-IP-100000": {
      "DSL-IP-100000": {
        priority: "1",
        standard: true,
        customer: true,
        internet: true,
        phone: true,
        business: true,
        consumer: true,
        filename: "DSL-IP-100000.json",
        download: "100",
        vpCategory: "dslip",
      },
    },
    "DSL-IP-16000": {
      "DSL-IP-16000": {
        priority: "1",
        standard: true,
        customer: true,
        internet: true,
        phone: true,
        business: true,
        consumer: true,
        filename: "DSL-IP-16000.json",
        download: "16",
        vpCategory: "dslip",
      },
    },
  },
};

const ul = document.querySelector("ul");

Object.keys(obj.dsl).forEach(k => {
  const li = document.createElement("li");
  li.innerText = k;
  ul.appendChild(li);
})
<ul>
</ul>

评论

0赞 Som Shekhar Mukherjee 4/19/2021
@TraktorJack 请检查这是否解决了您的问题,如果您有任何问题,请告诉我。
0赞 TraktorJack 4/19/2021
谢谢Som!但是我拥有的对象持续了相当长的时间,我只附加了前几个嵌套对象。到目前为止,我尝试的是将对象转换为数组,因为遍历数组似乎比遍历对象更容易。我在想for循环或函数会是最有效的解决方案吗?
0赞 Som Shekhar Mukherjee 4/19/2021
@TraktorJack 我给出的解决方案是一个有效的解决方案,即使有很多密钥。 Indeed 返回一个数组。如果对象的结构保持不变,则 no.的项目不会使此解决方案效率低下。Object.keys()
0赞 TraktorJack 4/19/2021
是的,但我不会显示每个键。我刚刚在顶部发表了评论,如果这有意义的话,我只应该显示倒数第二个嵌套对象。不是每个键
0赞 Som Shekhar Mukherjee 4/19/2021
@TraktorJack 如果有三个键,你只想显示第二个键?请澄清,以便我以更好的方式提供帮助。