[英]Checking if two values per key are true in an associative object
我有一個object,寫法如下:
var color = "darkred";
var source = "person1"; //this is generated elsewhere and changes
var target = "work23"; //this is generated elsewhere and changes
link = {
color: color,
source: source,
target: target,
value:1
}
這個 object 通過 function 添加到數組links
中,如下所示,這意味着首先檢查它是否已經存在於數組中:
var links = [];
function person_linker(link) {
for (var key in links) {
if (links[key].source === link.source && links[key].target === link.target) {
}
else
{
links.push(link);
}
}
}
我遇到的問題是它似乎並沒有真正做這個檢查,只是添加了link
object ,但是很多鍵都在links
中。 我讀過的所有內容都表明編寫 if 語句是進行這種檢查的方式,但大多數信息都假設您只針對每個鍵一個值。 很明顯 && 不是通往 go 的方法,但我嘗試將兩者分開,執行 find、indexOf 和 filter 語句,但似乎沒有任何效果。 代碼在技術上返回我想要的,但是因為它允許將多個link
對象添加到links
中,所以當它進行檢查並創建虛假條目時它會吃掉 memory - 可能會在 object 中添加數萬行額外的行. 我在這里做錯了什么? 我確信這是一個簡單的修復,但我無法終生弄清楚 Javascript 想要什么。
您需要使用數組過濾方法。 這是我使用once
來檢查是否已添加鏈接的示例。 而且它會更有效,因為它會在links
數組中找到提供的鏈接之后跳過所有不必要的檢查。
在此處查看更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
let color = "darkred"; let source = "person1"; //this is generated elsewhere and changes let target = "work23"; //this is generated elsewhere and changes let link = { color: color, source: source, target: target, value: 1, }; const links = []; function person_linker(link) { const linkAlreadyAdded = links.some(presentedLink => { return (presentedLink.source === link.source) && (presentedLink.target === link.target) }); if (linkAlreadyAdded) { console.log('Check failed.'); } else { console.log('Check passed.'); links.push(link); } } console.log(links); person_linker(link); console.log(links); person_linker(link); console.log(links);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.