如何更改Javascript以更新为一个?
答案 0 :(得分:0)
这里有一些选择。首先,您可以为对象创建原型,并在构造函数中默认值。即
function Foo(name, quantity) {
this.name = name;
this.quantity = !quantity && quantity !== 0 ? 1 : quantity;
}
然后,当您实例化数组时,可以使用new Foo(name, quantity);
构造函数创建对象,如果数量为null
或undefined
,则将使用默认值1。
var arr= [new Foo('a', 1), new Foo('b')];
有关falsy values
的构造函数行为的示例,请参阅附带的snipped。
另一种选择是使用forEach
迭代整个数组并重新设置quantity
null
的值,但这感觉很脏。
即
arr.forEach( x => { x.quantity = !x.quantity && x.quantity !== 0 ? 1 : x.quantity })
function Foo(name, quantity) {
this.name = name;
this.quantity = !quantity && quantity !== 0 ? 1 : quantity;
}
var foo = new Foo('stuff', null);
console.log(JSON.stringify(foo, null, '\t'));
foo = new Foo('stuff', undefined);
console.log(JSON.stringify(foo, null, '\t'));
foo = new Foo('stuff', 0);
console.log(JSON.stringify(foo, null, '\t'));
foo = new Foo('stuff', -1);
console.log(JSON.stringify(foo, null, '\t'));
var arr= [new Foo('a', 1), new Foo('b')];
console.log(JSON.stringify(arr, null, '\t'));

<强>更新强>
根据您更新的代码,您可以简单地为Item创建一个类,只需从构造函数中设置值即可。然后,您可以为列表定义一个类,以便包装计算总计的功能,以及连接项目数组。请查看下面的代码段以获取工作示例。
class Item {
constructor(name, price, quantity){
this.name = name;
this.price = price;
this.quantity = !quantity && quantity !== 0 ? 1 : quantity;
}
}
class SomeList {
constructor() {
this.items = [];
}
addItems(list) {
list.forEach(x => {
this.items.push(x);
});
}
get total() {
var t = 0;
this.items.forEach(i => { t += (i.price * i.quantity); });
return t;
}
}
// define the array of items, using the constructor of the item class
var arr = [ new Item('a', 100, 1), new Item('b', 50) ];
// Create the list and add the items
var list = new SomeList();
list.addItems(arr);
// get the total
var total = list.total;
console.log('Total '+ list.total);
&#13;
答案 1 :(得分:0)
一个简单有效的解决方案是在进一步处理数组或将其传递给列表之前,使用.map()
修改null
数量的项目:
array.map(i => ((i.quantity = i.quantity || 1), i))
以下代码段中的演示代码:
let array = [{name: 'a', price: 1, quantity: 1}, {name: 'b', price: 1, quantity: null}];
let updatedArray = array.map(i => ((i.quantity = i.quantity || 1), i));
console.log(updatedArray);