检查关联对象中每个键的两个值是否为 true

我有一个对象,写如下:


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

            }

此对象被添加到数组中,如下所示,该函数旨在首先检查它是否已存在于数组中: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);

    }

  }

}

我遇到的问题是它似乎并没有真正执行此检查,而只是为其中有多少键添加对象。我读到的所有内容都表明,编写 if 语句就是进行这种检查的方式,但大多数信息都假设你只追求每个键的一个值。很明显,&&不是要走的路,但是我已经尝试将两者分开,执行find,indexOf和filter语句,但似乎没有任何效果。从技术上讲,代码返回了我想要的内容,但由于它允许添加多个对象,因此在执行检查时会占用内存并创建虚假条目 - 可能会向对象添加数万行。我在这里做错了什么?我确信这是一个简单的修复,但我一辈子都无法弄清楚Javascript想要什么。linklinkslinklinks


潇湘沐
浏览 60回答 1
1回答

catspeake

您需要使用数组筛选方法。这是我用来检查是否已添加链接的示例。此外,它将更有效率,因为它将在数组中找到呈现的链接后跳过所有不必要的检查。oncelinkslet color = "darkred";let source = "person1"; //this is generated elsewhere and changeslet target = "work23"; //this is generated elsewhere and changeslet 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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript