JavaScript—为什么推送不起作用并引发异常?
如何通过保持现有pc不变来获得pc.id和pc.quantity?执行以下操作无法获取异常JavaScript—为什么推送不起作用并引发异常?,javascript,jquery,json,Javascript,Jquery,Json,如何通过保持现有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';
//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;
}
}
只能推送到阵列。 只需在声明函数之前添加这一行
var pc = [];
function createPeerConnection() {
.....
推送仅存在于阵列上 如果需要pc.id和pc.quantity,可以直接添加元素
pc.id = element.id;
pc.quantity = element.quantity;
或者,如果要将其用作数组,请选中JSFIDLE:
在本例中,我为pc定义了一个push函数,用于检查最新的索引器,并添加一个新元素。不过,在初始化其值之后,您应该只向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函数添加到对象中(同样,仅添加一次:)
根据评论更新
然而,这只留下最新的推送,当第二个add上没有定义id时,第一个id可能仍然存在(但是您可以确保在元素上至少将id定义为null)
JSFIDLE更新:
你是否声明数组pc=[]pc是数组还是对象?如上所述。push是数组方法。如果pc不是一个数组,你可以推送所有你想要的,但它不会产生。pc在Javascript中是这样分配的:
var pc={{pc_config | safe}代码>使用Google App Engine,python将pc_配置分配为“pc_配置”:json.dumps(pc_配置)`+1-这解决了问题:pc.push=Array.prototype.push.bind(pc)代码>为什么我没有定义?当我尝试时:pcConfig.push=Array.prototype.push.bind(pcConfig);var元素={id:'test',数量:30};pcConfig.push(元件);console.log(“>>>>>>”+pcConfig.id)代码>这里我想让pcConfig.id打印我的“test”,但它说的是undefinedpush索引了你的值(你现在是以数组的方式来做的)。将其读为pcConfig[0].id
,pcConfig[1].id
,等等……我更新了我的答案,仍然是针对您上面的最后一条评论:)
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);
}
pc.push = function(val) {
if (typeof val === 'undefined' || !val) {
return;
}
for (var i in val) {
if (!val.hasOwnProperty(i)) {
continue;
}
pc[i] = val[i];
}
};