Javascript将int视为字符串中间公式

时间:2014-03-13 23:30:03

标签: javascript typescript

我有一个相当简单的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", 
}

2 个答案:

答案 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] +