0

だから私はオブジェクトで埋められた配列を持っています。オブジェクトには2つの値があり、1つはリスト項目を含み、もう1つはfloat(価格)を含みます。リストをDOM要素にプッシュしようとしていますが、変数はグローバルに定義されていません。

このコードは、2番目の配列項目をコンソールに出力します。

$('#coll-price-filter').change(function() {
    var newList = [];
    $('#coll-product-list li').each(function(idx, li) {
        pprice = $(li).find('.coll-prod-price').html().trim().substring(1)
        pprice = parseInt(pprice);
        newList[idx] = {
            value: $(li).wrap('<div></div>').parent().html(),
            price: pprice
        }
        newList.sort(function(a, b){  
            a = a.price, b = b.price;
            return a > b ? 1 : a < b ? -1 : 0;
        });
    });
    console.log(newList[1].value);
});    


しかし、これはしません

$('#coll-price-filter').change(function() {
    var newList = [];
    $('#coll-product-list li').each(function(idx, li) {
        pprice = $(li).find('.coll-prod-price').html().trim().substring(1)
        pprice = parseInt(pprice);
        newList[idx] = {
            value: $(li).wrap('<div></div>').parent().html(),
            price: pprice
        }
        newList.sort(function(a, b){  
            a = a.price, b = b.price;
            return a > b ? 1 : a < b ? -1 : 0;
        });
    });

    i = newList.length;
    while (i > 0) {
        console.log(newList[i].listItem);
        i--;
    }
});    


したがって、whileループがnewList[]オブジェクトのアクセシビリティを破壊しているように見えます。私はそれをいくつかの方法で試しましたが、.each()イテレータ内にいる場合は機能します。しかし、私はそれを外でアクセスする必要があります。

4

2 に答える 2

3

配列インデックスは0ベースであるため、これは次のとおりです。

    i = newList.length;

これである必要があります:

    i = newList.length - 1;

それ以外の場合、開始インデックスは範囲外であるため、範囲外にnewList[i]なりundefined、上のプロパティへのアクセスundefinedTypeErrorです。

これを修正したら、.valueまたはなどのオブジェクトで定義されたプロパティにアクセスする必要があります。.priceそうしないと、undefined反復ごとにログに記録されます。

于 2012-10-02T18:03:10.823 に答える
2

これはすべきではありません:

i = newList.length;
while (i > 0) {
    console.log(newList[i].listItem);
    i--;
}

これでしょうか?

i = newList.length-1; // start on the last index, not length
while (i > 0) {
    console.log(newList[i].value); // value, like in your top example
    i--;
}
于 2012-10-02T18:02:17.513 に答える