如何通过保持现有的pc原样来获得pc.id和pc.quantity?做以下工作无法获得异常
//Example Python pc_config is assigned to pc : var pc = {{ pc_config | safe }};
function createPeerConnection() {
try {
var element = {};
element.id = 'test001';
element.quantity = '30';
pc.push(element);
console.log(JSON.stringify(pc));
// i want to have : pc.id or pc.quantity without losing the default values already
// pc was assigned by Python
} catch (e) {
console.log("FAIL");
return;
}
}
答案 0 :(得分:2)
push仅存在于数组
你可以直接添加元素,以备你想要pc.id& pc.quantity
pc.id = element.id;
pc.quantity = element.quantity;
或者如果你想将它用作数组,请检查jsfiddle:http://jsfiddle.net/Fe9Z3/
在这种情况下,我定义了一个推送功能到pc,它检查你最新的索引器是什么,并添加一个新元素。在初始化其值之后,您应该只将pc添加到pc一次。
function jsonNormal() {
var el = document.getElementById('json_normal');
var pc = {};
pc.push = function(val) {
var i = 0;
while (typeof pc[i] !== 'undefined') {
i++;
}
pc[i] = val;
};
var element = { id: 'test', quantity: 30 };
var element2 = { id: 'test2', quantity: 40 };
pc.push(element);
pc.push(element2);
el.innerHTML = JSON.stringify(pc);
}
此示例使用数组的原型函数,该函数需要pc元素内的属性长度,然后将push函数添加到对象中(同样,只添加一次:))
function jsonArray() {
var el = document.getElementById('json_push_array');
var pc = {length:0};
pc.push = Array.prototype.push.bind(pc);
var element = { id: 'test', quantity: 30 };
var element2 = { id: 'test2', quantity: 40 };
pc.push(element);
pc.push(element2);
el.innerHTML = JSON.stringify(pc);
}
但这只会留下最新的推送,有可能在第二次添加时没有定义id时,第一个id仍然存在(但是你可以确保id至少在你的元素上被定义为null)
Jsfiddle更新:http://jsfiddle.net/3ULy8/
pc.push = function(val) {
if (typeof val === 'undefined' || !val) {
return;
}
for (var i in val) {
if (!val.hasOwnProperty(i)) {
continue;
}
pc[i] = val[i];
}
};
答案 1 :(得分:0)
您只能推送到数组。 只需在声明函数之前添加此行。
var pc = [];
function createPeerConnection() {
.....