我有一个相当简单的javascipt公式:
Math.round(minMax[0] + ((minMax[1] - minMax[0]) / 2));
minMax [0]的值为1,minMax [1]为5
但出于某种原因,我得到的结果 12 。在那里我期待 3 ,现在我的猜测是它将((minMax[1] - minMax[0]) / 2)
计算为2,然后将它们作为字符串加在一起,结果为" 1" +&# 34; 2" = 12
如何让javascript将其视为数字?
更新: 如果我将公式更改为以下,那么它可以工作,但是很难看,因为地狱
index = Math.round(parseInt(minMax[0]) + ((parseInt(minMax[1]) - parseInt(minMax[0])) / 2));
更新2:如何找到min max,这是在Typescript
中private getMinMaxIndex(parentIds: number[]): number[] {
var minIndex = 99999999;
var maxIndex = -1;
for (var k in parentIds) {
var index = this.getIndexOf(parentIds[k]);
if (index > maxIndex) maxIndex = index;
if (index < minIndex) minIndex = index;
}
return [minIndex, maxIndex];
}
...
var minMax = this.getMinMaxIndex(limitedParents);
index = Math.round(parseInt(minMax[0]) + ((parseInt(minMax[1]) - parseInt(minMax[0])) / 2));
更新3:
private getIndexOf(id: number) {
var nodes: INode[] = this.nodes.Get();
for (var i in nodes) {
if (nodes[i].GetId() == id)
return i;
}
console.log("Unable to find parent index, for node id: " + id + " in swimlane " + this.Name + ", this should not happen and will break.");
console.log(nodes);
return null;
}
export interface INode{
GetId(): number;
...
}
export class SubmissionNode implements INode {
...
constructor(data: DiagramInputObject) {
this.data = data;
}
public GetId(): number {
return this.data.Id;
}
}
export interface DiagramInputObject {
Id: number;
...
}
Finally the DiagramInputObject in question that is how it is parsed into the code
{
Id: 1014,
UserId: 1,
Type: 0,
SwimLaneId: null,
SwimLaneName: null,
Submitted: new Date("3/9/2014 8:56:00 PM"),
ParentId: 9,
MergeId: null,
Exportable: false,
TypeData: "null",
}
答案 0 :(得分:2)
private getIndexOf(id: number) {
var nodes: INode[] = this.nodes.Get();
for (var i in nodes) { // <---- PROBLEM HERE
if (nodes[i].GetId() == id)
return i;
}
console.log("Unable to find parent index, for node id: " + id + " in swimlane " + this.Name + ", this should not happen and will break.");
console.log(nodes);
return null;
}
请记住,在JavaScript中,所有(所有!)数组索引实际上是字符串。 for in
循环枚举对象的所有键,对象的所有键都是字符串。然后,getIndexOf
返回一个字符串。
您应该使用标准的基于长度的for
循环:
for(var i = 0; i < nodes.length; i++) {
/* same loop body */
}
答案 1 :(得分:-2)
正如其他人已经指出的那样,我已经知道,变量不是整数。 我正在使用打字稿,所以我没有解决这个问题,为了解决它,我在数字周围添加了parseInt以确保它是一个整数。
奇怪的是,((minMax[1] - minMax[0]) / 2)
计算为数字,但minMax[0] + ((minMax[1] - minMax[0]) / 2)
不是。我只能猜测/ 2强制javascript以整数形式查看变量,只是说这个剂量没有延伸到minMax[0] +
。