比较数组中的对象并删除重复&更新 - Javascript

时间:2014-04-25 14:11:52

标签: javascript arrays object

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

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_itemNumber保持相同的值,如果CatalogItem_quantity不同 - 将CatalogItem_quantity值加在一起并更新对象数组。

我不需要一个确切的答案,但正确方向的推动会产生奇迹。在过去的几个小时里,我看了几个相关的问题,但似乎都没有解决这个问题。如果你知道一个有答案的问题,也可以随意链接。我可能错过了它。

请不要Underscore.js

2 个答案:

答案 0 :(得分:0)

找到匹配的记录后,您可以使用$.extend

进行更新
        $.extend(result[0], o)

这将在就地更新finalObject数组中的对象。

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

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

        }); 
        finalObject.push(o)

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

答案 1 :(得分:0)

以下列方式解决:

1。)验证对象不为空。

2.。)在对象上使用.some()来迭代它。

3.)检查现在finalObject的{​​{1}}是否与我收集的临时对象e中的密钥匹配。

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

注意:最初我打算通过索引删除对象并将其替换为新对象。这也可以通过使用o并获取您所在的数组中当前对象的索引来工作。

以下是更新版本:

.splice()