访问数组索引0工作,1不工作

时间:2012-03-09 07:52:45

标签: javascript jquery


我完全糊涂了。这是我的第一个基于Javascript和jQuery的Web项目(没有使用其他语言)。这是某种纺织品商店。尺码有不同的价格。像38-43成本20,43-48成本22和48-52成本24.这就是我想把它放在网站上的方式(38-43 => 20,43-48 => 22,等等)。文章存储在xml文件中,如下所示:

<article id="025064">
    <title>Tshirt</title>
    <desc>Description</desc>

    <size value="38" price="50,12" />
    <size value="39" price="50,12" />
    <size value="40" price="50,12" />
    <size value="41" price="50,12" />
    <size value="42" price="50,12" />
    <size value="43" price="50,12" />
    <size value="44" price="50,12" />
    <size value="45" price="50,12" />
    <size value="46" price="50,12" />
    <size value="47" price="54,15" />
    <size value="48" price="54,15" />
    <size value="49" price="54,15" />
    <size value="50" price="54,15" />
    <size value="51" price="58,18" />
    <size value="52" price="58,18" />
    <size value="53" price="58,18" />
    <size value="54" price="58,18" />
</article>

我使用jQuery来解析它。这一切都有效。现在我找到了价格最低和最高的尺寸。为此,我将我所知道的一切都放在了数组中。

var prices = new Object();
var laenge = 0;

$(this).find('size').each(function(){
    var size = $(this).attr('value');
    var price = $(this).attr('price');

    if(typeof(prices[price])!=="undefined")
    {
        laenge = prices[price].length;
    }

    prices[price] = new Array();
    prices[price][laenge] = size;
});

现在我试图通过对数组进行排序来获得最高和最低的价格

$.each(prices, function(index, value){
    prices[index].sort();
    var maximum = prices[index].length-1;
    alert(prices[index][0]+" "+prices[index][maximum]);
});

但我只是从0索引中获取值。所有其他索引(大于0)都不起作用,即使var最大值表示有几个元素。通过使用下一个代码(在我之前显示的代码中)向我展示了索引被命名为常规用于(0,1,2,3,4,5):

$.each(prices[index], function(index1, value) {
    alert(index1);
});

但我无法访问它们。我感到很困惑。是的,我知道,下次我应该使用Console.Log。但这不应该存在问题:)

二手浏览器:谷歌浏览器17.0.963.66米 Web服务器(遗憾地):win server 2003标准上的IIS v6

提前非常感谢你!

最佳,
卡尔文

1 个答案:

答案 0 :(得分:1)

在示例中,您无法访问0之后的任何元素,因为您正在删除此行中的任何先前值

$(this).find('size').each(function(){
    ...
    // here you erase all previous values of prices
    prices[price] = new Array();
    ...
});

你可以通过仅创建一个新数组来解决这个问题,如果没有,就像这样:

var prices = {};
$(this).find('size').each(function() {
  var size = $(this).attr('value');
  var price = $(this).attr('price');

  // first ensure that there is an array at prices[price]
  // '[]' and 'new Array()' are equivalent in this case
  prices[price] = prices[price] || [];    

  // don't hassle with the last index, simply add the size
  prices[price].push(size);
});

prices[price] || []行上的一句话: 与C / Java不同,JavaScript中的||运算符不返回所涉及的值之间的布尔比较,而是左手值,如果它等于true或右手值,如果左手值为false。因此[1,2,3] || []将返回[1,2,3],但undefined || []将返回空数组。