检查关联对象中每个键的两个值是否为真
Checking if two values per key are true in an associative 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
}
这个对象被添加到一个数组,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
对象,尽管 links
中有很多键。我读过的所有内容都表明编写 if 语句是进行此类检查的方式,但大多数信息都假定您只在每个键上查找一个值。很明显 && 不是要走的路,但我已经尝试将两者分开,执行 find、indexOf 和 filter 语句,但似乎没有任何效果。代码在技术上是 returns 我想要的,但是因为它允许将多个 link
对象添加到 links
它在进行检查时会占用内存并创建虚假条目 - 使用添加到对象中的数万条额外行的潜力。我在这里做错了什么?我确信这是一个简单的修复,但我终其一生都无法弄清楚 Javascript 想要什么。
您需要使用数组过滤方法。这是我使用 once
检查是否已添加 link 的示例。它还会更有效率,因为它会跳过在 links
数组中找到的 link 之后所有不必要的检查。
在此处查看更多内容: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);
我有一个对象,写法如下:
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);
}
}
}
我 运行 遇到的问题是,它似乎并没有实际执行此检查,只是添加了 link
对象,尽管 links
中有很多键。我读过的所有内容都表明编写 if 语句是进行此类检查的方式,但大多数信息都假定您只在每个键上查找一个值。很明显 && 不是要走的路,但我已经尝试将两者分开,执行 find、indexOf 和 filter 语句,但似乎没有任何效果。代码在技术上是 returns 我想要的,但是因为它允许将多个 link
对象添加到 links
它在进行检查时会占用内存并创建虚假条目 - 使用添加到对象中的数万条额外行的潜力。我在这里做错了什么?我确信这是一个简单的修复,但我终其一生都无法弄清楚 Javascript 想要什么。
您需要使用数组过滤方法。这是我使用 once
检查是否已添加 link 的示例。它还会更有效率,因为它会跳过在 links
数组中找到的 link 之后所有不必要的检查。
在此处查看更多内容: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);