Javascript 如何使用jQuery在特定索引处将值插入2d数组

Javascript 如何使用jQuery在特定索引处将值插入2d数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有以下两个阵列: groupedObjects: [ { value: 125, currency: "EUR" }, { value: 100, currency: "USD" }, {value: 320, currency: "RON" } ] groupedObjects1: [ { value: 500, currency: "EUR" }, { value: 280, currency: "RON" } ] 如何使这两个阵列看起来完全

我有以下两个阵列:

groupedObjects: [
    { value: 125, currency: "EUR" }, 
    { value: 100, currency: "USD" }, 
    {value: 320, currency: "RON" }
]
groupedObjects1: [
    { value: 500, currency: "EUR" }, 
    { value: 280, currency: "RON" }
]
如何使这两个阵列看起来完全相同? 我希望代码之后的第二个数组如下所示:

[
    { value: 500, currency: "EUR" }, 
    { value: 0, currency: "USD" }, 
    { value: 280, currency: "RON" }   
]
我尝试过以下代码:

if ($(groupedObjects).length > $(groupedObjects1).length) {
    _.each(groupedObjects,function(obj){
        i++;
        _.each(groupedObjects1,function(obj1){
            if(obj.currency != obj1.currency) {
                alert('Test');
                groupedObjects1.push ({
                    value: '',
                    currency: ''
                });
            }                               
        });
    });
} 

我希望这两个数组都按货币排序,并且它们都应该有相同数量的元素,无论哪个数组更大,都有两种方法可以实现这一点,而将一个向数组中添加空白值的函数拼凑在一起肯定是其中之一,但是,一种更面向对象的方法将会给您带来更多帮助

    groupedObjects= [
        { value: 125, currency: "EUR" }, 
        { value: 100, currency: "USD" }, 
        {value: 320, currency: "RON" }
    ];
    groupedObjects1= [
        { value: 500, currency: "EUR" }, 
        { value: 280, currency: "RON" }
    ];


if ($(groupedObjects).length > $(groupedObjects1).length) {

var newArray = [];
$.each(groupedObjects, function (key, value) {
    var flag = false;
    var breakout = false;
    flag = (function () {
        $.each(groupedObjects1, function (key1, value1) {
            if (value.currency === value1.currency) {
                newArray.push(value1);
                breakout = true;
                return false;
            }

        });
        if (!breakout) {
            return true;
        }
    })();
    if (flag) {
        newArray.push({
            value: 0,
            currency: value.currency
        });
    }
});
groupedObjects1 = newArray;

}
我不知道你的javascript有多“高级”,所以如果听起来像是我在哄你,我很抱歉

我们要做的第一件事是设置一个Currency类。有一些方法可以做到这一点,但我更喜欢下面的那个,很可能是因为我来自C++背景。如果您愿意,请随意使用其他方法

function Currency(type, quantity){
    this.type = type;
    this.quantity = quantity;
}
如果需要,可以添加一些验证,例如确保数量大于0或该类型为有效货币。您还可以将这些属性设置为私有,并为它们实现访问器,但我现在只想让它保持简单。如果愿意,可以为每种货币扩展它,因此可以说
newUSD(280)
来创建一个值为280的USD对象

因此,现在我们已经结算了我们的货币,我们可以考虑如何存储它们。我们希望确保如果没有添加货币,其数量等于0。为此,我们将为每种货币类型实例化一个对象,然后根据需要设置其值

下面是一个非常简单的实现:

function CurrencyList(){
    var valid_currencies = ["EUR", "RON", "USD"];
    this.currencies = [];
    for(i in valid_currencies){
        this.currencies[i] = new Currency(valid_currencies[i], 0);   
    }
}
我刚刚创建了一个有效货币数组,对其进行迭代,并使用有效货币对象创建了一个“public”属性。我将它存储在一个数组中,就像你已经做过的那样,它只是在一个对象中

不过我们还没做完。如果某个邪恶的人删除了我们数组中的一个元素怎么办?我们会回到你原来的问题上来。我们可以通过使
货币在对象外部不可见来解决这个问题

function CurrencyList(){
    var valid_currencies = ["EUR", "RON", "USD"];
    currencies = [];
    for(i in valid_currencies){
        currencies[i] = new Currency(valid_currencies[i], 0);   
    }
}
现在,如果我们尝试这样的方法:

var currency_list = new CurrencyList();
alert(currency_list.currencies[0]);
this.at = function(index){
    return currencies[index];   
}
var currency_list = new CurrencyList();
alert(currency_list.at(0));
我们得到一个错误,这意味着我们的数组不能从外部修改

这引入了另一个问题:如果要查看数组中的元素,该怎么办?答案是实现一个访问器(“get”)方法

我们只需创建一个“公共”属性并将其设置为函数,如下所示:

var currency_list = new CurrencyList();
alert(currency_list.currencies[0]);
this.at = function(index){
    return currencies[index];   
}
var currency_list = new CurrencyList();
alert(currency_list.at(0));
现在,我们可以访问如下货币:

var currency_list = new CurrencyList();
alert(currency_list.currencies[0]);
this.at = function(index){
    return currencies[index];   
}
var currency_list = new CurrencyList();
alert(currency_list.at(0));
这就是它的全部:

function CurrencyList(){
    var valid_currencies = ["EUR", "RON", "USD"];
    currencies = [];
    for(i in valid_currencies){
        currencies[i] = new Currency(valid_currencies[i], 0);   
    }

    this.at = function(index){
        return currencies[index];   
    }
}

function Currency(type, quantity){
    this.type = type;
    this.quantity = quantity;
}
这将确保您不会有不匹配的阵列,因此我们不必为一个黑客式的事后解决方案而烦恼。换句话说,它不会解决您的问题,而是阻止问题的存在,这是一个更好的解决方案。它还确保数组按货币排序,因为元素将始终按照构造函数中指定的顺序排列。

不要在同一索引中使用
push()
Insert de item

使用以下命令:

if ($(groupedObjects).length > $(groupedObjects1).length) {
_.each(groupedObjects,function(obj){
    i++;
    _.each(groupedObjects1,function(index, obj1){
        if(obj.currency != obj1.currency) {
            alert('Test');
            groupedObjects1[index] = ({
                value: '',
                currency: ''
            });
        }                               
    });
});

}

push()insert可能重复到数组末尾谢谢你的回答,但现在我遇到了一个问题,这是因为有时数组是相等的(groupedObjects==groupedObjects1),但值不同。在这种情况下,如何将缺少的值添加到两个数组中?