从每个函数中的特定索引开始

时间:2014-07-05 16:19:47

标签: javascript jquery html slice

请查看此fiddle

如何在循环中使用slice使其从特定索引开始返回结果?

JSON文件:

[
  {
    "title": "A",
    "link": "google.com",
    "image": "image.com",
    "price": "$1295.00",
    "brand": "ABC",
    "color": "Black",
    "material": "Rubber"
  }
]

我希望它从brand开始返回结果:

brand - ABC

color - Black

material - Rubber

我不知道将.slice(4)放在循环中的位置。我使用
得到了未定义的错误     $.each(value.slice(4),function(key, value)

以下是代码:

JS:

   $.ajax({
        url: "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%20%3D%22http%3A%2F%2Fgoo.gl%2FaZgYDB%22&format=json&diagnostics=true&callback=",
        success: function (data) {
            var item_html="";
            $(data.query.results.json).each(function(key, value) {
              $.each(value,function(key, value){                             
               item_html += '<h3>'+key+' - '+value+'</h3>';                        
              });
            });            

           $('#area').append(item_html);

        }
    });

2 个答案:

答案 0 :(得分:2)

使用单独的属性名称数组,以便您可以对其进行切片并以保证的顺序获取名称。

var props = [
    "title",
    "link",
    "image",
    "price",
    "brand",
    "color",
    "material"
    ];

$.ajax({
    url: "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%20%3D%22http%3A%2F%2Fgoo.gl%2FaZgYDB%22&format=json&diagnostics=true&callback=",
    dataType: 'json',
    success: function (data) {
        var item_html="";
        var propslice = props.slice(4);
        $.each(data.query.results.json, function(i, obj) {
            $.each(propslice, function(i, key) {
                value = obj[key];
                item_html += '<h3>'+key+' - '+value+'</h3>';
            });
        });
        $('#area').append(item_html);
    }
});

如果您想跳过少量属性,可以在对象中列出它们,并针对该列表进行测试:

var excluded_props = {
    title: true,
    link: true,
    image: true,
    price: true
};

$.ajax({
    url: "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%20%3D%22http%3A%2F%2Fgoo.gl%2FaZgYDB%22&format=json&diagnostics=true&callback=",
    dataType: 'json',
    success: function (data) {
        var item_html="";
        $.each(data.query.results.json, function(i, obj) {
            $.each(obj, function(key, value) {
                if (!excluded_props[key]) {
                    value = obj[key];
                    item_html += '<h3>'+key+' - '+value+'</h3>';
                }
            });
        });
        $('#area').append(item_html);
    }
});

答案 1 :(得分:1)

对象无法满足您的要求。 Javascript中的对象不是有序的,只有数组。您有几个选择:

  • 将您的对象重构为数组
  • 重构您的对象,以便每个键都有一个新的键用于订单*
  • 循环遍历对象的每个属性,将其放入数组(无保证顺序!),然后循环遍历数组。

*示例:

[
  {
    "title": {
        "value" : "A",
        "order" : 4
    },
    "link": {
        "value" : "google.com",
        "order" : 5
    ...
  }
]