循环数组不起作用

时间:2014-11-25 18:31:24

标签: javascript oop

我有一个我用于购物篮的代码,我似乎无法解决如何添加到成本变量。

var basket = {};
basket.items = [];
basket.costCalculate = function() {
    var cost = 0,
        html = "Total: " + cost;
    for(var i = 0; i < this.items.length; i++) {
        cost = (cost + parseInt(this.items[i].price));
    };
    return html;
};
basket.print = function() {
    var basketCon = document.getElementById("basket"),
        html = "";
    basketCon.innerHTML = "<h1>Basket - " + this.costCalculate() + "</h1>";
    for(var i = 0; i < this.items.length; i++) {
        html += '<div class="item">';
        for(prop in this.items[i]) {
            if(prop != "id") {
                html += '<p><span class="title">' + prop + '</span>: ' + this.items[i][prop] + '</p>';
            }
        };
        html += '</div>';
    };
    basketCon.innerHTML += html;
};

function init() {
    shop.print()
    basket.handler();
};
window.onload = init;

我一直试图遍历items数组的长度并总结成本字段。但似乎没有用。有什么非常基本的我做错了吗?

1 个答案:

答案 0 :(得分:0)

您正在使用identity运算符。您没有分配值 cost === (cost + parseInt(this.items[i].price));

应该是:

cost += parseInt(this.items[i].price);

其余的:

var basket = {};
basket.items = [{price:10}, {price:"10"} /*,{price:"nan"}*/];

basket.costCalculate = function () {
    var cost = 0;
    for (var i = 0; i < this.items.length; i++) {
        // Breaks for NaN values
        cost = (cost + parseInt(this.items[i].price));
    }
    return cost;
};

basket.print = function () {
    var basketCon = document.getElementById("basket"),
        html = "";
    basketCon.innerHTML = "<h1>Basket - Cost: " + this.costCalculate() + "</h1>";
    for (var i = 0; i < this.items.length; i++) {
        html += '<div class="item">';
        for (var prop in this.items[i]) {
            if (prop != "id") {
                html += '<p><span class="title">' + prop + '</span>: ' + this.items[i][prop] + '</p>';
            }
        }
        html += '</div>';
    }
    basketCon.innerHTML += html;
};

function init() {
    //shop.print();
    basket.print();
}

window.onload = init;

<强> Fiddle