我有一个数组,我需要汇总价格并分配给另一个数组。
问题在于
toll_prices[vehicle_id] = toll_prices[vehicle_id] + price;
作为一个字符串,因为(我猜)第一次toll_prices[vehicle_id]
未定义,我没有得到一个数字,但字符串未定义+ 1 + 2 + 3。
以下是完整代码:
for (y in vehicles)
{
var vehicle_id = vehicles[y].id;
var price = vehicles[y].price;
toll_prices[vehicle_id] = toll_prices[vehicle_id] + price;
}
任何帮助表示赞赏
答案 0 :(得分:1)
您可以使用|| 0
将任何假名值转换为数字0
,这样可以保证您添加数字,而不是未定义的值:
toll_prices[vehicle_id] = (toll_prices[vehicle_id] || 0) + price;
答案 1 :(得分:0)
"将字符串转换为数字"这只是问题的一部分。
tool_prices
不是一个数组;它是一个对象。您现有的代码尝试对尚未定义的tool_prices中的键执行添加操作; " undefined"来自。
这是一个纠正这个问题的例子;有关详细信息,请参阅代码中的注释。 (我使用forEach
代替你的for...in
并不重要,只是习惯;循环中的内容才是重要的。)
var vehicles = [
{ id: "a", price: "1"},
{ id: "a", price: "1"},
{ id: "a", price: "1"},
{ id: "a", price: "1"},
{ id: "b", price: "2"},
{ id: "c", price: "3"},
{ id: "d", price: "100"}
];
var tool_prices = {};
vehicles.forEach(function(v) {
// need to define the tool_prices for this id if it doesn't exist yet:
if (!tool_prices[v.id]) {
tool_prices[v.id] = 0
}
// now we can add it (while also converting to Number, just to be sure):
tool_prices[v.id] += Number(v.price);
});
console.log(tool_prices);

更新:现在我再次查看它,我想可能tool_prices
是稀疏数组而不是对象,假设ID是数字。这并没有改变答案的核心,但这里是完整性的一个例子:
var vehicles = [
{ id: 1, price: "1"},
{ id: 1, price: "1"},
{ id: 2, price: "1"},
{ id: 2, price: "1"},
{ id: 3, price: "2"},
{ id: 3, price: "3"},
{ id: 5, price: "100"}
];
var tool_prices = [];
// the rest is the same as in the above example
vehicles.forEach(function(v) {
if (!tool_prices[v.id]) {
tool_prices[v.id] = 0
}
tool_prices[v.id] += Number(v.price);
});
console.log(tool_prices);