访问对象jQuery中的数组元素

时间:2015-04-25 22:54:02

标签: javascript jquery arrays

我想用一个颜色填充画布,该颜色是对象内部的数组元素,元素索引应该是 i 但代码似乎是错误的。 color1 中的变量已经声明,并且包含一个字符串,该字符串是颜色的十六进制值。

var colorsObj = {
    color1: [orange,amber,apricot,tangerine,bittersweet,persimmon,salmon,peach,pumpkin]
}

function drawCanvas(color) {
    for(var i = 1; i < 10; i++){
    $('.app').append('<canvas class="shadescolors" id="shade'+i+'"  width="100" height="100">');
    var canvas = document.getElementById('shade'+i);
    var context = canvas.getContext('2d');

    canvas.width = window.innerWidth / 3;
    cc = canvas.width;
    radius = cc/2-10;
    canvas.height = canvas.width;
    context.beginPath();
    context.arc(cc/2, cc/2, cc/2-10, 0, Math.PI*2, true);
    alert(colorsObj.color[i]);
    context.fillStyle = colorsObj.color[i];
    context.fill();
    context.lineWidth = 2;
    context.strokeStyle = '#8A8A8A';
    context.stroke();
    }
}

drawCanvas('color1');

警报也不会触发。

2 个答案:

答案 0 :(得分:3)

这里的主要问题是您需要使用colorObj[color]来访问您的颜色列表而不是colorObj.color,因为您想要使用{{的 1}}变量,用于选择color中的特定颜色列表。 (我假设您稍后可能会在colorObj内有color2个条目,等等,对吗?)

你也错过了颜色列表的第一个元素,开始使用colorObj循环,1循环限制应该使用颜色列表的10而不是硬编码。

你在循环中的几个变量上错过.length,因为你将varcccanvas.width都设置为相同的值你可以在一个声明中做所有这些。

作为简化提示,您无需为canvas.height元素提供顺序ID,并使用canvas进行查找。相反,您可以在创建元素时保存对元素的引用,并使用它。

我还在getElementById()元素的HTML代码中删除了width=height=;它们是多余的,因为您在代码中设置宽度和高度。

最后,请缩进您的代码! : - )

所以你可以尝试这样的事情:

canvas

答案 1 :(得分:0)

color1数组字符串或其他变量中的值是?如果它们是字符串,则应该是:

[[int,int],[int]]

记住数组中的第一个元素有索引0,所以为了修复你的for循环,我会这样做:

    cimport cython
    import numpy as np
    cimport numpy as np
    import pandas as pd

    offcat = [
        "breakingPeace", 
        "damage", 
        "deception", 
        "kill", 
        "miscellaneous", 
        "royalOffences", 
        "sexual", 
        "theft", 
        "violentTheft"
        ]

    def partitionAIC(EmpFrame, part, OffenceEstimateFrame, ReturnDeathEstimate=False):
        """EmpFrame is DataFrame of ints, part is nested list of ints, OffenceEstimate frame is DF of float"""
        """partOf/block is a list of ints"""
        """ll, AIC,  is series/frame of floats"""
        ##Cython cdefs
        cdef int DFlen
        cdef int puns
        cdef int DeathPun    
        cdef int k
        cdef int pId
        cdef int punish

        DFlen = EmpFrame.shape[1]
        puns = 2
        DeathPun = 0
        PartitionModel = pd.DataFrame(index = EmpFrame.index, columns = EmpFrame.columns)

        for partOf in part:
            Grouping = [puns*x + y for x in partOf for y in list(range(0,puns))]
            PartGroupSum = EmpFrame.iloc[:,Grouping].sum(axis=1)

            for punish in range(0,puns):
                PunishGroup = [x*puns+punish for x in partOf]
                punishPunishment = ((EmpFrame.iloc[:,PunishGroup].sum(axis = 1) + 1/puns).div(PartGroupSum+1)).values[np.newaxis].T
                PartitionModel.iloc[:,PunishGroup] = punishPunishment
        PartitionModel = PartitionModel*OffenceEstimateFrame

        if ReturnDeathEstimate:
            DeathProbFrame = pd.DataFrame([[part]], index=EmpFrame.index, columns=['Partition'])
            for pId,block in enumerate(part):
                DeathProbFrame[pId] = PartitionModel.iloc[:,block[::puns]].sum(axis=1)
            DeathProbFrame = DeathProbFrame.apply(lambda row: sorted( [ [format("%6.5f"%row[idx])]+[offcat[X] for X in  x ] 
                for idx,x in enumerate(row['Partition'])],
                key=lambda x: x[0], reverse=True),axis=1)
        ll = (EmpFrame*np.log(PartitionModel.convert_objects(convert_numeric=True))).sum(axis=1)
        k = (len(part))*(puns-1)
        AIC = 2*k-2*ll

        if ReturnDeathEstimate:
            return AIC, DeathProbFrame
        else:
            return AIC

您的警告声明中也有一个错误,您使用的是color1: ['orange','amber','apricot','tangerine','bittersweet','persimmon','salmon','peach','pumpkin'] 而不是for(var i = 0; i < colorsObj.color1.length; i++) (color1,而不是颜色)