簡體   English   中英

檢查關聯 object 中每個鍵的兩個值是否為真

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM