给出一个对象字面值:
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值,然后重复使用它。
如果可能,怎么做?
编辑:我将此作为本地数据使用,而不是作为穿越网络的交换格式。
答案 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
简单地反序列化它
注意:我使用字符串来定义C²
属性,您只能通过括号表示法检索它,否则您将获得Unexpected token ILLEGAL
在你的控制台中。