向JSON添加自定义属性会产生重复

时间:2015-07-09 13:47:28

标签: javascript json

我正在为我的JSON添加一个自定义属性,但最后它会创建一个副本!一个包含我的自定义属性名称,另一个没有它。

var array = [];
array.push([]);
var parentKey = "HELLO";
array[array.length - 1].push(array[array.length - 1].parent = parentKey);
console.log(array);

JSFIDDLE

所以最后我想得到:

[
    [
            "Parent": "Hello"
    ]
]

2 个答案:

答案 0 :(得分:3)

array[array.length - 1].push(array[array.length - 1].parent = parentKey);

(array[array.length - 1].parent = parentKey)不返回array[array.length - 1],而是返回parentKey

所以

array[array.length - 1].push(array[array.length - 1].parent = parentKey);

等于

var item = array[array.length - 1].parent = parentKey; // item becomes "HELLO" here
array[array.length - 1].push(item);

因此,您只需将parent的{​​{1}}分配给"HELLO",然后将“Hello”推送到array[array.length - 1]

这不是重复。

对于你的期望,你应该写:

array[array.length - 1]

答案 1 :(得分:1)

您的代码:

array = [[]]
array[array.length - 1].push(array[array.length - 1].parent = parentKey);

创建以下对象:

[ [ 'HELLO', parent: 'HELLO' ] ]

然而,问题使用带有赋值的push()作为参数,它执行赋值然后添加赋值的返回值(即属性)到数组,这就是你看到的重复的原因。

创建JSON对象的正确方法是:

array = [[]]
array[array.length - 1].parent = parentKey;

给出:

[ [ parent: 'HELLO' ] ]

注意

正如下面的Juhana所指出的,(不知道你的使用情况)如果你想创建一个JSON对象数组,那么以下是最正确的一个:

array = [{}]
array[array.length - 1].parent = parentKey;