我有对象的数组是这样的:JS - 如何基于在对象的数组另一个键的值更改一个关键的价值
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
可成千上万的迭代。
这是根据匹配idTag
值更改count
值的最佳方法吗?有没有一种方法可以找到正确的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]
'指数。
因此,如果为chartData
的idTags是{20,21,22,23,24,25,26,27,28,29,30}
,如果runTrial()
给出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++;
}
所以感谢所有您的帮助:)
该数组由'idTag'排序? – zerkms
你可以自由改变chartData的结构吗? – Dancrumb
@zerkms是的,数组是按idTag排序的。该数组是按顺序创建的,所以它按照定义进行排序。 – azmanam