在插入array
之前尝试检查多个字段的副本时遇到了一些问题。我要做的是从firebase
检索,检查accountID
和subtype
字段,然后插入要由Promise解析的array
。
我想要实现的目标是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);
});
我得到的输出:
输出
我仍然看到很多重复使用相同的accountID和相同的子类型。无论如何要解决这个问题吗?
谢谢!
答案 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')