gpt4 book ai didi

javascript - 如何从对象数组中获取从未出现在特定属性中的值

转载 作者:行者123 更新时间:2023-11-30 13:53:51 25 4
gpt4 key购买 nike

我有一个数组,其中包含具有两个属性 sourcetarget 的对象列表。我想找到一个从未出现在 target 中的值。

目前,我想到了一个非常奇怪的解决方案。根据提供的代码,我通过遍历 a 数组来创建两个单独的数组。 all 包含所有元素,targets 仅包含目标元素。然后我对其应用过滤器并返回答案。

    const a = [
{ source: '2', target: '3' },
{ source: '1', target: '2' },
{ source: '3', target: '4' },
{ source: '4', target: '5' }
];

const all = ['1', '2', '3', '4', '5'];
const targets = ['3', '2', '4', '5'];
console.log(all.filter(e => !targets.includes(e))[0]);

我们是否有一些有效的解决方案,不需要创建这两个数组,我知道返回元素只会是一个。所以我不想得到一个数组作为答案

最佳答案

您可以使用 .find 找到第一个匹配的元素:

const a = [
{ source: '2', target: '3' },
{ source: '1', target: '2' },
{ source: '3', target: '4' },
{ source: '4', target: '5' }
];
const sources = [];
const targets = [];
a.forEach(({ source, target }) => {
sources.push(source);
targets.push(target);
});

console.log(sources.find(e => !targets.includes(e)));

如果你想要更好的性能,为目标使用一个集合而不是一个数组,这样你就可以使用.has而不是.includes(导致整体复杂度为 O(n) 而不是 O(n^2)):

const a = [
{ source: '2', target: '3' },
{ source: '1', target: '2' },
{ source: '3', target: '4' },
{ source: '4', target: '5' }
];
const sources = [];
const targets = new Set();
a.forEach(({ source, target }) => {
sources.push(source);
targets.add(target);
});

console.log(sources.find(e => !targets.has(e)));

关于javascript - 如何从对象数组中获取从未出现在特定属性中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57672053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com