【问题标题】:Order element with a for..in and each loop带有 for..in 和每个循环的 order 元素
【发布时间】:2014-08-05 02:59:38
【问题描述】:

我试图弄清楚如何在 for..in 循环中,在另一个 each 循环中订购商品,循环遍历我的订单数组以尊重。

我的数据有一个对象:

dataObj = {
    "sites":{
        "dribbble":{
            // ID = 0
            "username":"JeremDsgn"
        },
        "behance":{
            // ID = 1
            "username":"JeremDsgn"
        },
        "cinqcentpx":{
            // ID = 2
            "username":"jeremdsgn"
        }
    },
    "order":["1","2","0"]
};

实际上我在显示循环中为每个项目添加了id,但是在对象中添加id会更好吗?

所以之后,我尝试使用要尊重的订单数组来显示我的商品。

var index = 0;

for (var site in dataObj.sites) {
    var itemList = '<li id="' + index + '">' + site + '</li>';

    $.each(dataObj.order, function(i, id) {
        console.log(i, id);
        $(itemList).appendTo('.list-social .social-wrapper');       
    });

    index++;
}

但我复制了我的网站 3 次,因为此时我的 dataObj.sites 对象上有 3 个元素。

那么如何才能以良好的顺序显示我的 itemList?最终结果应该是:

<div class="list-social">
    <ul class="social-wrapper">
        <li id="1">behance</li>
        <li id="2">cinqcentpx</li>
        <li id="0">dribbble</li>
    </ul>
</div>

FIDDLE:http://jsfiddle.net/JeremDsgn/XhnyS/

【问题讨论】:

  • 这是有问题的 for-in 声明。那是不保证订单的部分。而是使用for 语句(或$.each)来迭代dataObj.order 数组,而不是给它索引,而是按照你想要访问它的顺序给它每个dataObj.sites 属性的名称。
  • ...order:["behance","cinqcentpx","dribbble"] 然后您还需要将 ID 添加到每个对象。
  • 我完全不清楚。因为实际上我已经使用 each 循环遍历 dataObj.order。
  • ...如果 ID 真的要对应于每个对象的从零开始的索引,那么对象数组似乎更有意义。

标签: javascript jquery for-loop each


【解决方案1】:

试试这个。它奏效了。

   $.each(dataObj.order, function(i, id) {
    console.log(i, id);
    var index = 0;  
    for (var site in dataObj.sites) {
       console.log(index);
        if(index==id){
          console.log("equal",id,index,site);
          var itemList = '<li id="' + index + '">' + site + '</li>';
          $(itemList).appendTo('.list-social .social-wrapper');
          break;
          }
    index++;
    }
});

【讨论】:

    【解决方案2】:

    我不确定您要做什么,但也许这个小提琴有帮助? http://jsfiddle.net/XhnyS/7/

    我没有使用字符串数字的索引和订单列表,而是简单地将订单列表更改为站点键本身,然后创建一个列表项并将其添加到找到的每个 .social-wrapper 中。

    dataObj = {
        "sites":{
            "dribbble":{
                "username":"JeremDsgn"
            },
            "behance":{
                "username":"JeremDsgn"
            },
            "cinqcentpx":{
                "username":"jeremdsgn"
            }
        },
        "order":["cinqcentpx", "behance", "dribbble"]
    };
    
    for (var i = 0; i < dataObj.order.length; i++) {
        var siteName = dataObj.order[i];
        var itemList = $('<li/>').attr('id', i).text(siteName + ': ' + dataObj.sites[siteName].username);
        $(itemList).appendTo('.list-social .social-wrapper');
    }
    

    编辑以实际回答问题:)

    【讨论】:

    • 您没有使用dataObj.order 列表。 Object.keys() 不保证任何特定顺序,就像 for-in
    • 我应该只有三个 li 项目,另一个是重复的,我不知道如何不重复它们。如果可能的话,我宁愿保留号码以便订购。
    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 2021-08-24
    • 2010-09-21
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多