求和数组的内容并分配给另一个数组

时间:2017-06-10 17:25:18

标签: javascript

我有一个数组,我需要汇总价格并分配给另一个数组。

问题在于

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

任何帮助表示赞赏

2 个答案:

答案 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);