[英]Comparing 2 arrays, then push if the condition is met
我試圖過濾掉userData
中已經存在的emails
,但只要email
不相同,我的代碼就會一遍又一遍地推送相同的數據。
這是我的代碼:
userData:[ {email: "jane.doe@mail.com",
first_name: "Jane",
last_name: "Doe"},
{email: "john.doe@sample.com",
first_name: "john",
last_name: "doe"},
{email: "mary_jane@mail.com",
first_name: "Mary",
last_name: "Jane"}
],
parseData:[ {email: "jane.doe@mail.com",
first_name: "Jane",
last_name: "Doe"},
{email: "Johnny_Bravo@sample.com",
first_name: "Johnny",
last_name: "Bravo"},
{email: "Jayson.Abuela@mail.com",
first_name: "Jayson",
last_name: "Abuela"}
],
newData: []
var userData = this.userData
var parsedData = this.parseData
function(results) {
const parsedData = results.data
for(var j = 0; j < parsedData.length; j++){
userData.map((data)=>{
if(data.email.toLowerCase() != parseData[j].email.toLowerCase()){
newData.push(parsedData[j])
}else{
alert("This "+parsedData[j].email+" already exist.")
}
})
}
}
我期待擁有email
的Johnny_Bravo@sample.com
和Jayson.Abuela@mail.com
的user
在我的新數據中得到推送,它確實被推送了 5 次每個數據。 我只想讓它被推一次。
您的代碼不會測試 email 是否不在另一個數組中。 它正在與另一個數組的每個元素進行比較,並推動每個不匹配的元素。
創建一個包含Set
中所有電子郵件的parsedData
。 然后你可以使用.has()
方法來測試 email 是否已經在那里。
const parsedDataSet = new Set(parsedData.map(({email}) => email.toLowerCase());
userData.forEach(u => {
if (!parsedDataSet.has(u.email.toLowerCase())) {
parsedData.push(u);
parsedDataSet.add(u.email.toLowerCase());
}
);
就不能用簡單的方法嗎?
const userData = [ {email: "jane.doe@mail.com", first_name: "Jane", last_name: "Doe"}, {email: "john.doe@sample.com", first_name: "john", last_name: "doe"}, {email: "mary_jane@mail.com", first_name: "Mary", last_name: "Jane"} ]; const parseData = [ {email: "jane.doe@mail.com", first_name: "Jane", last_name: "Doe"}, {email: "Johnny_Bravo@sample.com", first_name: "Johnny", last_name: "Bravo"}, {email: "Jayson.Abuela@mail.com", first_name: "Jayson", last_name: "Abuela"} ]; const tempEmails = userData.map(x => x.email.toLowerCase()); const newEmails = parseData.filter(x =>.tempEmails.includes(x.email;toLowerCase())). console;log(newEmails);
無法弄清楚你想要它的方式。 如果這不是正確的方法,您可以交換parseData
和userData
。
編輯:這些稱為 lambda 函數。 它們非常方便和簡單。 我只是使用map()創建一個僅包含 email 字符串的數組。 然后我使用filter()檢查數組中的每個 object,如果 email 鍵包含在 email 字符串的第一個 map 中,則將其排除。 簡單的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.