我有一个这样的对象数组:
var chartData = [{count: 0, idTag: "24"}
{count: 0, idTag: "25"}
{count: 0, idTag: "26"}]
我的代码做了一些工作并生成一个数字 ( totalValue
)。如果totalValue
与 匹配idTag
,则其count
增加一:
for (i=0; i<timesFlipped; i++) {
totalValue = runTrial();
for (j=0; j<chartData.length; j++) {
if (chartData[j].idTag === totalValue) {
chartData[j].count += 1;
break;
}
}
}
这是一个简单的示例,但chartData
可以容纳几十个对象,并且timesFlipped
可以进行数十万次迭代。
这是count
根据匹配idTag
值更改值的最佳方法吗?有没有办法在idTag
不遍历整个对象数组的情况下找到具有正确值的数组索引?
如果您需要更多上下文,这是我正在处理的页面:http: //blue.butler.edu/~aazman/coupling/
更新:
感谢所有的建议。我有点根据我所看到的形成了自己的解决方案。关于该项目的更多背景信息使我找到了我的解决方案:
- 的长度
chartData
和最小 idTag 值是根据用户点击提交时的输入计算的 - 一旦
min
和length
被计算(因此最大 idTag 是已知的),chartData
被迭代初始化:
var min = 23-5*numNickel-numPenny; //numNickel & numPenny are the user inputs
var length = 5*(2*numNickel+1)+2*numPenny;
var tempTag = min;
for (j=0;j<length;j++) {
chartData[j] = {count: 0, idTag = tempTag};
tempTag++;
}
- 由于特定于游戏规则的原因,idTag 值(无论有多少)对称地集中在周围
idTag:25
(例如 idTags = {24, 25, 26} 或 idTags = {20,21,22,23,24,25, 26,27,28,29,30}. 无论 的长度如何chartData
,长度总是奇数,idTag:25
总是第[(chartData.length-1)/2]
'th 索引。
因此,如果 idTag 的chartData
are{20,21,22,23,24,25,26,27,28,29,30}
和 if given ,那么runTrial()
将始终位于 index 。totalValue = 22
idTag:22
(totalValue - min)
所以我改变了chartData的初始化和计数增加的方式:
for (j=0; j<length; j++) {
chartData[j] = {count: 0}; //based on what I'm doing with chartData next, I need each index to still be an object
}
for (i=0; i<timesFlipped; i++) {
totalValue = runTrial();
var index = totalValue - min;
chartData[index].count++;
}
所以感谢大家的帮助:)