JavaScript - 为什么推送不起作用并抛出异常?

时间:2014-06-11 11:40:15

标签: 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.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;
  }

}

2 个答案:

答案 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() {
   .....