Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery push()进入数组的奇怪行为_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript jQuery push()进入数组的奇怪行为

Javascript jQuery push()进入数组的奇怪行为,javascript,jquery,arrays,Javascript,Jquery,Arrays,我想把一些元素放到二维数组中 我使用的代码是: samount.push ({ "value": val, "currency": currency }); 我正在尝试将阵列推入samount,如下所示: samount.push ({ "value": val, "currency": currency }); groupedArray = [{value: 100, currency: 'EU

我想把一些元素放到二维数组中 我使用的代码是:

samount.push ({
        "value": val, 
        "currency": currency
    });
我正在尝试将阵列推入samount,如下所示:

samount.push ({
        "value": val, 
        "currency": currency
    });
groupedArray = 
     [{value: 100, currency: 'EUR'},
      {value: 100, currency: 'EUR'},
      {value: 100, currencu: 'EUR'}]
事实上,上面的数组表示一个表的行,在每次单击行时,push()函数都会向do samount数组添加一个新元素

samount.push ({
        "value": val, 
        "currency": currency
    });
单击两行后,samount数组如下所示:

samount.push ({
        "value": val, 
        "currency": currency
    });
samount = 
     [{value: 100, currency: 'EUR'},
      {value: 100, currency: 'EUR'}]
在第三行单击时,阵列变为:

samount.push ({
        "value": val, 
        "currency": currency
    });
samount = 
     [{value: 200, currency: 'EUR'},
      {value: 100, currency: 'EUR'},
      {value: 100, currencu: 'EUR'}]
我必须提到,我的代码里面没有求和,所以push()函数对第一个元素的值求和,并且仍然将它们添加到数组中,这是非常奇怪的

samount.push ({
        "value": val, 
        "currency": currency
    });
您知道push()函数是否可以将元素添加到这种类型的数组中吗

samount.push ({
        "value": val, 
        "currency": currency
    });
完整的代码是:

samount.push ({
        "value": val, 
        "currency": currency
    });
"fnDrawCallback": function (oSettings) {  
    var $dt = $('#dt_debts').footable({  
     breakpoints: { // The different screen resolution breakpoints  
         phone: 320,  
         tablet: 768  
     }   
    });  
    $dt.trigger('footable_resize');  

    var amount      = new Array();
    var samount     = new Array();  

    $('#dt_debts tbody tr ').each( function () {                            
        var iPos = oTable.fnGetPosition( this );
        if (iPos!=null) {
            var aData = oTable.fnGetData( iPos );
            if (jQuery.inArray(aData[0], selected)!=-1) {
                $(this).addClass('row_selected');
                $(this).find( 'td input:checkbox' ).attr('checked', 'checked');
            }
        }
        $(this).click( function (e) {   
            e.preventDefault();                     
            var iPos = oTable.fnGetPosition( this );
            var aData = oTable.fnGetData( iPos );
            var iId = aData[0];
            is_in_array = jQuery.inArray(iId, selected);
            if (is_in_array==-1) {
                selected[selected.length]=iId;
            }
            else {
                selected = jQuery.grep(selected, function(value) {
                    return value != iId;
                });
            }
            if ( $(this).hasClass('row_selected') ) {
                console.info('>>> Operatie de eliminare');
                $(this).removeClass('row_selected');
                $(this).find( 'td input:checkbox' ).prop('checked', false);
                if ($(aData[0]).data('typo') == "t-0") {
                    val = parseFloat(aData[9].split(" ")[0]);
                    currency = aData[9].split(" ")[1];
                    if (currency != '') {
                        $.each(amount, function(idx, item) {
                            if (item.currency == currency && item.value == val) {
                                amount.splice(idx, 1); // Remove current item
                                return false; // End the loop
                            }
                        });
                    }
                } else if ($(aData[0]).data('typo') == "t-1") {
                    val = parseFloat(aData[10].split(" ")[0]);
                    currency = aData[10].split(" ")[1];
                    if (currency != '') {
                        $.each(samount, function(idx, item) {
                            if (item.currency == currency && item.value == val) {
                                samount.splice(idx, 1); // Remove current item
                                return false; // End the loop
                            }
                        });                                 
                    }                                       
                }
                console.info(amount);
                console.info(samount);
            } else {
                console.info('>>> Operatie de adaugare');
                $(this).addClass('row_selected');                                   
                $(this).find( 'td input:checkbox' ).attr('checked', 'checked');

                if ($(aData[0]).data('typo') == "t-0") {
                    val = parseFloat(aData[9].split(" ")[0]);
                    currency = aData[9].split(" ")[1];
                    if (currency != '') {
                        amount.push ({
                                "value": val, 
                                "currency": currency
                            });
                    }       
                } else if ($(aData[0]).data('typo') == "t-1") {
                    val = parseFloat(aData[10].split(" ")[0]);
                    currency = aData[10].split(" ")[1];
                    if (currency != '') {
                        samount.push ({
                                "value": val, 
                                "currency": currency
                            });
                    }       
                }
                console.info(amount);
                console.info(samount);                                  
            }
}
在花了数小时搜索错误后,我发现错误在代码的这一部分:

samount.push ({
        "value": val, 
        "currency": currency
    });
var objects1 = new Array();
objects1 = samount;
var categories1 = new Array();
var groupedObjects1 = [];
var i = 0;

_.each(objects1,function(obj){
    var existingObj;

    if($.inArray(obj.currency,categories1) >= 0) {
        existingObj = _.find(objects1,function(o){return o.currency === obj.currency;});
        existingObj.value += obj.value;
    } else {
        groupedObjects1[i] = obj;
        categories1[i] = obj.currency;
        i++;
    }
});// JavaScript Document

实际上,samount数组似乎正在被修改,即使我已经声明了一个新数组用于into循环。我不明白为什么循环会修改初始数组,即使我没有使用它

是的,推送也可以。事实上,我对它进行了测试,它按照预期工作。我假设正在发生的是在其他地方修改的值-因为您正在使用值
val
将一个对象推入数组中,数组将只包含对整个对象的引用而不是它所表示的值

samount.push ({
        "value": val, 
        "currency": currency
    });
只是为了说明这一点

samount.push ({
        "value": val, 
        "currency": currency
    });
var val = { "value" : 100 };
var storage = [ ];

storage.push(val);


console.log("value  : " + val.value);
console.log("value in storage : " + storage[0]["value"]);

val.value = 200;

console.log("value  : " + val.value);
console.log("value in storage : " + storage[0]["value"])
屈服

samount.push ({
        "value": val, 
        "currency": currency
    });
value  : 100
value in storage : 100
value  : 200
value in storage : 200
JavaScript中的变量对于原语(例如整数)是按值传递的,但对于对象是按引用传递的。

您可以使用
.join()
而不是
.push()

samount.push ({
        "value": val, 
        "currency": currency
    });

请显示更多获取
值的周围代码
。另外,你到底需要什么帮助还不清楚。你看到了什么结果?那么,你期望它是什么呢?你是说推就是推的值的总和?你有没有可能在小提琴上重新创建它。我想在小提琴上重新创建它很可能是不可能的,因为它的代码结构很大。。你说的对,在推送数组时,值是在第二行单击后求和的。我使用带有fnDrawCallback的jQuery Datatables,在每行单击时,我将值从表推送到arrayWell,push()不会对对象内的值求和,所以我认为不可能重新创建,这就是我问的原因。还有一些事情正在发生,只是推与此无关。我想你是想说“通过引用传递”,但那是不正确的。JS总是“按值传递”。“通过引用传递”是另一回事:。感谢您的回答,但是在代码中搜索了几个小时的错误后,我发现eror位于一个循环中。我将编辑我的帖子,以说明错误在哪里,但我仍然不知道如何解决它。我想这里有一个名为
\u
(下划线)的数组。看那个