为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇湘沐 2023-09-14 20:32:19
我有一个对象,写如下:var color = "darkred";var source = "person1"; //this is generated elsewhere and changesvar target = "work23"; //this is generated elsewhere and changeslink = {              color: color,              source: source,              target: target,              value:1            }此对象被添加到数组中,如下所示,该函数旨在首先检查它是否已存在于数组中:linksvar 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
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

您需要使用数组筛选方法。这是我用来检查是否已添加链接的示例。此外,它将更有效率,因为它将在数组中找到呈现的链接后跳过所有不必要的检查。oncelinks


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);


查看完整回答
反对 回复 2023-09-14
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信