2013-11-12 2 views
-2

Я пытаюсь сделать так, чтобы Javascript автоматически суммировал цены предметов в инвентаре вместе, а также отображает общее количество элементов в инвентаре. Я должен был бы сделать так, чтобы он работал на любую сумму, добавленную в инвентарь. Это то, что у меня есть до сих пор. БлагодаряДобавление значений объектов Javascript

function inventory (a,b,c) 
{ 
this.name = a; 
this.price = b; 
this.id = c; 


var item1 = new item ("Pen", 2.50,"001"); 
var item2 = new item ('Pencil', 1.25, '002'); 
var item3 = new item ('Paper', 0.75, '003'); 
} 
+2

вы просто вызов 'new' без действительно что на самом деле, или у вас на самом деле есть класс с именем 'item'? – adeneo

+2

Не зная, что он делает. – user2981229

+0

Использование массивов: http://eloquentjavascript.net/chapter4.html. –

ответ

0

Я не 100% уверен, что вы пытаетесь достичь здесь, но вы можете сделать что-то вроде этого, если вы хотите, переплетенную свойство объекта ...

var Inventory = { 
    "items" : [ 
     { "name" : "paperclip", "price" : 25 }, 
     { "name" : "folder", "price" : 350 }, 
     { "name" : "desk", "price" : 2999 } 
    ], 
    "total" : function totalItems() { 
     var total = 0; 
     this.items.forEach(function(item) { 
      total += item.price; 
     }); 
     return total; 
    } 
}; 

console.log(Inventory.total()); // 3275 
console.log(Inventory.items.length) // 3, # items 
+0

Отлично, именно то, что я искал. Thanks – user2981229

+0

Нет проблем. Вы действительно должны дать эту книгу шаблонов проектирования небольшое чтение, это поможет вам использовать JS в более общем подходе к ООП. –

+0

Использование сокращения для расчета общего количества woul будет немного более элегантным;). 'this.items.reduce (function (a, b) {return a.price + b.price;});' – plalx

0
// By convention, class names should begin with an uppercase letter 
function Item (a,b,c) { 
    this.name = a; 
    this.price = b; 
    this.id = c; 
} 

function getTotal() { 
    var total = 0; 
    // Loop over the inventory array and tally up the total cost 
    for (var i = 0; i < inventory.length; i ++) { 
     total += inventory[i].price; 
    } 
    return total; 
} 

// We can store our item instances on an array 
var inventory = [ 
    new Item ("Pen", 2.50,"001"), 
    new Item ('Pencil', 1.25, '002'), 
    new Item ('Paper', 0.75, '003') 
]; 

console.log('Total is:', getTotal()); 
1

Я предложил бы использовать библиотеку как Underscore или Lodash. Они предоставляют множество полезных функций для работы с массивами, коллекциями и объектами.

В частности, проверить функцию уменьшения(): http://underscorejs.org/#reduce

Так что если у вас есть массив элементов, чтобы получить сумму их цены все, что вам придется сделать, это:

var sum = _.reduce(items, function(total, item){return total + item.price;}, 0); 
Смежные вопросы