将JSON数据值键传递给函数

时间:2013-06-20 23:13:03

标签: javascript json function arguments

我使用JSON对象提供的数据在画布上绘制线条:

var data = { values:[
{ X: "04-28", Xt: "7:45 pm", Ys: 116, Yd: 74, Yp: 0},
{ X: "04-29", Xt: "2:00 am", Ys: 112, Yd: 73, Yp: 0},
//

使用一些jQuery绘制线条:

c.lineWidth = 4;
c.strokeStyle = '#f00';
c.beginPath();
c.moveTo(getXPixel(0), getYPixel(data.values[0].Ys));
for(var i = 1; i < data.values.length; i ++) {
    c.lineTo(getXPixel(i), getYPixel(data.values[i].Ys));
}
c.stroke();

要绘制多行(以处理'Yd'和'Yp'以及稍后可能需要的任何其他行)我想将该位移动到一个函数中,我可以使用它来调用:< / p>

drawLine(4, '#f00', 'Ys');

我尝试过的功能:

function drawLine(width, style, d) {
    c.lineWidth = width;
    c.strokeStyle = style;
    c.beginPath();
    c.moveTo(getXPixel(0), getYPixel(data.values[0].d));
    for(var i = 1; i < data.values.length; i ++) {
        c.lineTo(getXPixel(i), getYPixel(data.values[i].d));
    }
    c.stroke();
}

不起作用。没有错误,但没有画线。如果我将'Ys'直接放在函数中,它确实有效。我如何将该位作为参数传递?

1 个答案:

答案 0 :(得分:2)

您不希望d的{​​{1}}属性,您想要values[i]所拥有的字符串值的属性。您需要使用d,而不是obj[d],如:

obj.d

例如:

function drawLine(width, style, d) {
    c.lineWidth = width;
    c.strokeStyle = style;
    c.beginPath();
    c.moveTo(getXPixel(0), getYPixel(data.values[0][d]));
    for(var i = 1; i < data.values.length; i ++) {
        c.lineTo(getXPixel(i), getYPixel(data.values[i][d]));
    }
    c.stroke();
}
相关问题