gpt4 book ai didi

javascript - 如何检查数组是否包含另一个对象的值?

转载 作者:行者123 更新时间:2023-12-01 15:49:52 24 4
gpt4 key购买 nike

我正在尝试创建一个函数,如果所有数组值都存在于对象值中,则该函数返回 true。
我已将对象值转换为一个名为 newArray 的新数组。 ;但我的问题是如何比较给定数组和新数组?

const compare = function (array, object) {
const newArray =Object.values(object)
//compare here and return true/false
};

compare(["one", "two", "three"], { 0: "one", 1: "two", 2: "three" }); // => true
compare(["one", "two", "four"], { 0: "one", 1: "two", 2: "three" }); // => false

最佳答案

I transformed the object values into a new array


我想一个 Set会更好,因为它有 has method具有亚线性性能,语义清晰明了。但获得 Set 的最简单方法是通过一个数组,所以... :-)
一旦您拥有 Set ,这是一个循环的问题,在这种情况下可能是 every :
const compare = (array, object) => {
const values = new Set(Object.values(object));
return array.every(v => values.has(v));
};
every返回 true如果回调总是返回一个真值,或者返回 false回调第一次返回一个假值(此时短路,没有理由继续寻找答案是否为“否”)。
但是,如果您想坚持使用数组,则可以使用 includesevery .它具有线性性能,但在 99.9999% 的情况下,性能无论如何都不重要:
const compare = (array, object) => {
const values = Object.values(object);
return array.every(v => values.includes(v));
};

Nina points out ,添加长度匹配的检查会更快地短路。以下是上述两种情况:
放:
const compare = (array, object) => {
const valuesArray = Object.values(object);
if (valuesArray.length !== array.length) {
return false;
}
const values = new Set(valuesArray);
return array.every(v => values.has(v));
};
大批:
const compare = (array, object) => {
const values = Object.values(object);
return array.length === values.length && array.every(v => values.includes(v));
};
你可以更进一步并添加
if (array.length === 0) {
return true;
}
在两者的最开始。

关于javascript - 如何检查数组是否包含另一个对象的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63593412/

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