JavaScript—为什么推送不起作用并引发异常?

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';

如何通过保持现有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;
  }

}

只能推送到阵列。 只需在声明函数之前添加这一行

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];
        }
    };