Javascript 数组对象可以全局接受,但不能在循环中接受

Javascript 数组对象可以全局接受,但不能在循环中接受,javascript,jquery,Javascript,Jquery,所以我有一个数组,里面填充了对象。对象有两个值,一个包含列表项,另一个包含浮动(价格)。我试图将列表推送到DOM元素中,但变量是全局未定义的 此代码将第二个数组项输出到控制台: $('#coll-price-filter').change(function() { var newList = []; $('#coll-product-list li').each(function(idx, li) { pprice = $(li).find('.coll-prod

所以我有一个数组,里面填充了对象。对象有两个值,一个包含列表项,另一个包含浮动(价格)。我试图将列表推送到DOM元素中,但变量是全局未定义的

此代码将第二个数组项输出到控制台:

$('#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价格过滤器')。更改(函数(){
var newList=[];
$(“#coll产品列表li”)。每个(函数(idx,li){
pprice=$(li).find('.coll产品价格').html().trim().substring(1)
pprice=parseInt(pprice);
新列表[idx]={
值:$(li).wrap(“”).parent().html(),
价格:pprice
}
排序(函数(a,b){
a=a.价格,b=b.价格;
返回a>b1:a

然而,事实并非如此

$('coll价格过滤器')。更改(函数(){
var newList=[];
$(“#coll产品列表li”)。每个(函数(idx,li){
pprice=$(li).find('.coll产品价格').html().trim().substring(1)
pprice=parseInt(pprice);
新列表[idx]={
值:$(li).wrap(“”).parent().html(),
价格:pprice
}
排序(函数(a,b){
a=a.价格,b=b.价格;
返回a>b1:a0){
console.log(newList[i].listItem);
我--;
}
});    

因此,while循环似乎正在破坏
newList[]
对象的可访问性。我已经尝试了几种方法,如果我在
.each()
迭代器中,它就会起作用。但我需要到外面去

这不应该:

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--;
}
这不应该:

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--;
}

由于数组索引基于
0
,因此:

    i = newList.length;
应该是这样的:

    i = newList.length - 1;
否则,起始索引超出范围,因此
newList[i]
将是
undefined
,访问
undefined
上的属性是一个类型错误


一旦您纠正了这一点,您可能希望访问对象上定义的属性,如
.value
.price
,否则每次迭代都会记录
未定义的

因为数组索引是基于
0
的,这:

    i = newList.length;
应该是这样的:

    i = newList.length - 1;
否则,起始索引超出范围,因此
newList[i]
将是
undefined
,访问
undefined
上的属性是一个类型错误


一旦您纠正了这一点,您可能希望访问对象上定义的属性,如
.value
.price
,否则每次迭代它都会记录
未定义的

+1更多信息。+1获得最佳答案。我想我应该知道array.length并不像索引那样从0开始计算。灰色工作,谢谢+1个更多信息+1个优秀答案。我想我应该知道array.length并不像索引那样从0开始计算。灰色工作,谢谢!