比较阵列中的对象并删除重复的(&;更新-Javascript

比较阵列中的对象并删除重复的(&;更新-Javascript,javascript,arrays,object,Javascript,Arrays,Object,我有一个对象数组,显示如下: 0: Object ConsolidatedItem_catalogId: "080808" ConsolidatedItem_catalogItem: "undefined" ConsolidatedItem_cost: "0" ConsolidatedItem_description: "Test Catalog Item" ConsolidatedItem_imageFile: "27617647008728.jpg" ConsolidatedItem_ite

我有一个对象数组,显示如下:

0: Object
ConsolidatedItem_catalogId: "080808"
ConsolidatedItem_catalogItem: "undefined"
ConsolidatedItem_cost: "0"
ConsolidatedItem_description: "Test Catalog Item"
ConsolidatedItem_imageFile: "27617647008728.jpg"
ConsolidatedItem_itemNumber: "1234"
ConsolidatedItem_quantity: "1"
ConsolidatedItem_source: "CAT"
ConsolidatedItem_status: "02"
ConsolidatedItem_umCode: "EA"

1: Object
ConsolidatedItem_catalogId: ""
ConsolidatedItem_catalogItem: "undefined"
ConsolidatedItem_cost: "0"
ConsolidatedItem_description: "ALARM,SHUTDOWN SYSTEM,AXIOM,XP3, 0-1500 PSIG, HIGH AND LOW PRES Testing"
ConsolidatedItem_imageFile: ""
ConsolidatedItem_itemNumber: "10008"
ConsolidatedItem_quantity: "1"
ConsolidatedItem_source: "INV"
ConsolidatedItem_status: "02"
ConsolidatedItem_umCode: "EA"
如果对象再次添加,我将尝试更新和删除该对象,或者更新该对象。最好用新值更新对象。我的代码如下:

var result = $.grep(finalObject, function(e) {
            return e.ConsolidatedItem_itemNumber == o.ConsolidatedItem_itemNumber;
        });
        console.log(result);
        if (result.length == 0) {
            finalObject.push(o);
            shoppingCounter = finalObject.length;
            $('#numberShoppedItems').text(shoppingCounter);
            console.log(finalObject);
        } else if (result.length == 1) {    
            finalObject.filter(function(x){
                result = x;
                console.log(result);
                return x == result.ConsolidatedItem_itemNumber;

            }); 
        } else {
            alert('Multiples Found');
        } 
    }
我尝试了多种方法来获取精确的对象和处理数据,但都失败了。我更愿意更新对象,比如说如果
CatalogItem\u itemNumber
持有相同的值,如果
CatalogItem\u数量
不同-将
CatalogItem\u数量
值添加到一起并更新对象数组

我不需要一个确切的答案,但朝着正确的方向轻推会产生奇迹。在过去的几个小时里,我研究了几个相关的问题,但没有一个能解决这个问题。如果你知道一个有答案的问题,也可以把它链接起来。我可能错过了


无下划线.js请

当您找到匹配的记录时,您可以使用
$更新它。扩展

        $.extend(result[0], o)
这将就地更新finalObject数组中的对象

或者,如果要使用过滤器,则需要在数组中插入新对象

        finalObject = finalObject.filter(function(x) {
            return x !== result[0];

        }); 
        finalObject.push(o)

这里,我们允许在finalObject中接收的结果数组中返回所有不等于result的记录。在下一行中,我们将添加新记录。

按以下方式解决:

1.)验证对象是否为空

2.)在对象上使用
.some()
对其进行迭代

3.)检查
finalObject
(现在是
e
)是否与我组装的临时对象
o
中的键匹配

4.)更新需要更新的值并返回true

注意:最初我打算通过索引删除对象,并用新对象替换它。这也可以通过使用
.splice()
并获取您所在数组中当前对象的索引来实现

以下是更新版本:

if (o.ConsolidatedItem_quantity != '') {

    var result = $.grep(finalObject, function(e) {
        return e.ConsolidatedItem_itemNumber == o.ConsolidatedItem_itemNumber;
    });
    if (result.length == 0) {...}
    else {
        finalObject.some(function (e) {
            if(e.ConsolidatedItem_itemNumber == o.ConsolidatedItem_itemNumber){
                var a;
                a = +e.ConsolidatedItem_quantity + +o.ConsolidatedItem_quantity;
                e.ConsolidatedItem_quantity = a.toString();
                document.getElementById(o.ConsolidatedItem_itemNumber).value=a;
                return true;
            };
        });
    }
}

如果已经在使用jQuery,为什么不使用它?或者:为什么要将
$.grep
Array::filter
混合使用?我删除了jQuery的限制。令人困惑的是,我们在重构时没有jQuery,但如果现在能让它变得更简单,那就好了。不,不,在这个任务中避免使用jQuery是个好主意,我只是惊讶地看到你自己使用了它。只需重构
$.grep
即可。