我正在为我的JSON添加一个自定义属性,但最后它会创建一个副本!一个包含我的自定义属性名称,另一个没有它。
var array = [];
array.push([]);
var parentKey = "HELLO";
array[array.length - 1].push(array[array.length - 1].parent = parentKey);
console.log(array);
所以最后我想得到:
[
[
"Parent": "Hello"
]
]
答案 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;