Javascript在插入数组之前检查重复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript在插入数组之前检查重复相关的知识,希望对你有一定的参考价值。

在插入array之前尝试检查多个字段的副本时遇到了一些问题。我想要做的是从firebase检索,检查accountIDsubtype字段之前插入array由Promise解决。

我想要实现的是如果相同的accountID,不同的subtype,那么我补充;如果相同的accountID,同样的subtype,我移动到下一个;如果不同的accountID,不同的subtype,我补充说。这是我的代码:

码:

var datasetarr = [];
let promiseKey = new Promise((resolve, reject) => {
                for(var i = 0; i < receiptlist.length; i++){
                    for(var k = 0; k < ritemlist.length; k++){
                        if(receiptlist[i].date.substring(0, 4) == new Date().getFullYear()){
                            if(ritemlist[k].receiptID == receiptlist[i].receiptID){
                              //check duplicate here before insert
                                if (!datasetarr.find(o => o.accountID === receiptlist[i].accountID && o.subtype === ritemlist[k].type))
                                    datasetarr.push({accountID: receiptlist[i].accountID, subtype: ritemlist[k].type});
                                }
                            }
                        }
                    }
                }
            resolve(datasetarr);
            });

我尝试打印数组时的部分:

数组:

promiseKey.then((arr) => {
            console.log(arr);
});

我得到的输出:

输出:

enter image description here

我仍然看到很多重复使用相同的accountID和相同的子类型。无论如何要解决这个问题?

谢谢!

答案

如果没有您的数据,find会返回undefined;所以你要做的就是检查返回的值是否为undefined,然后进行计算

  var found = datasetarr.find(o => o.accountID === receiptlist[i].accountID && o.subtype === ritemlist[k].type)
     if (found === undefined){
         //do computation
     }
另一答案

您可以使用lodash这是一个非常好的数组处理库。

在你的情况下,数据应该是accountId唯一的,你的数据存储在数据变量中,你可以像这样使用_.uniqBy()函数:

jvar datasetarr = []; 
  let promiseKey = new Promise((resolve, reject) => {
            for(var i = 0; i < receiptlist.length; i++){
                for(var k = 0; k < ritemlist.length; k++){
                    if(receiptlist[i].date.substring(0, 4) == new 
                       Date().getFullYear()){
                        if(ritemlist[k].receiptID == receiptlist[i].receiptID){
                                  //Push your object here.
                                datasetarr.push({accountID: receiptlist[i].accountID, subtype: ritemlist[k].type});
                            }
                        }
                    }
                }
            }

           //Before resolving check for the duplicates.
            _.uniqBy(datasetarr, function (data) {
                return data.accountID;
             });

            resolve(datasetarr);
        });

以上是关于Javascript在插入数组之前检查重复的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中使用 Entity Framework Core 插入数据之前检查重复字符串数据的最佳实践

如何在插入之前加快重复检查?

通过选择插入时,如何在插入表之前检查重复项

使用 Javascript 检查多维数组的长度 [重复]

代码片段使用复杂的 JavaScript 在 UIWebView 中插入 HTML?

在插入之前检查 sqlite 中的重复项(核心数据)