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

时间:2017-12-21 07:10:08

标签: javascript arrays duplicates

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

我想要实现的目标是accountIDsubtype不同,然后我添加;如果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和相同的子类型。无论如何要解决这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您的数据没有出现,

find会返回undefined;所以你要做的就是检查返回的值是否为undefined,然后进行计算

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

答案 1 :(得分:0)

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

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

import os
os.system ('ssh remoteuser at remote python remote.py arg1 "arg 2 has spaces" 
arg3')