JSON:C的值取决于其他值?

时间:2013-09-26 09:09:24

标签: javascript

给出一个对象字面值:

var data = {
   { "A": 3, "B": 4, "C²": 25, "C": 5 } // hint: triangle
}

其中值之间存在数学关系(C²=A²+B²)。

是否有可能进行一些“内部操作”:

var data = {
   { "A": 3, "B": 4, "C²": (Math.pow(A,2)+Math.pow(B,2)), "C": Math.sqrt("C²") } // hint: triangle
}

我将有一组+200 A,B值,我希望从中计算C值,然后重复使用它。

如果可能,怎么做?


编辑:我将此作为本地数据使用,而不是作为穿越网络的交换格式。

2 个答案:

答案 0 :(得分:1)

不,这是不可能的。

但是,您可以保存"operation" : "calculateTriangle"之类的值,然后根据该值执行操作。

答案 1 :(得分:1)

function buildTriangleObject(a, b) {
    var square = Math.pow(a, 2) + Math.pow(b, 2);
    return {
        A: a,
        B: b,
        "C²": square,
        C: Math.sqrt(square)
    };
}

var triangles = [],
    triangle = buildTriangleObject(3, 4), //Object
    stringified = JSON.stringify(triangle), //String, will be '{"A":3,"B":4,"C²":25,"C":5}'
    parsed = JSON.parse(stringified); //Object, equals triangle
triangles.push(triangle);

做你想要实现的东西有点复杂:你试图在另一个对象中引用一个对象的变量,这是一个有点傻的恕我直言(你可以这样做引用父对象,然后内心的对象,但它是一团糟,相信我)。通过这种方式,您可以使用一个辅助函数为您创建对象,并且您可以以您喜欢的任何方式对其进行操作。

由于您正在寻找此的JSON表示,您只需在JSON.stringify上使用triangles来获取整个数组的JSON,然后使用JSON.parse简单地反序列化它

注意:我使用字符串来定义属性,您只能通过括号表示法检索它,否则您将获得Unexpected token ILLEGAL在你的控制台中。