微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在尝试创建一个在对象值中存在所有数组值的情况下返回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","four"],2: "three" }); // => false

解决方法

我将对象值转换为新数组

我认为Set会更好,因为它具有https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/unsafe-code-pointers/pointer-types且具有亚线性性能,并且语义清晰明了。但是到达Set的最简单方法是通过数组,所以...:-)

一旦有了Set,就成为循环问题,在这种情况下,可能是has method

const compare = (array,object) => {
    const values = new Set(Object.values(object));
    return array.every(v => values.has(v));
};

every如果回调始终返回真实值,则返回true,或者在回调第一次返回虚假值时返回false(此时短路,没有理由继续寻找答案是否是“否”。

但是,如果要坚持使用数组,则可以在includes中使用every。它具有线性性能,但是在99.9999%的情况下,性能并不是至关重要的:

const compare = (array,object) => {
    const values = Object.values(object);
    return array.every(v => values.includes(v));
};

every一样,添加长度匹配的检查将更快地短路。这是以上两种情况的外观:

设置:

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

在两者的开头。

,

您可以对两个数组进行排序,然后检查它们的长度是否相同,并同时比较两个元素,从而遍历两个数组。

,

您可以使用Array.prototype.reduce()

const compare = (array,object) => {
    return Object.values(object).reduce((res,cur) => {
      return res && array.includes(cur);
    },1);
};  

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

,

我建议同时检查数组的长度和值。

const
    compare = (array,object) => {
        const values = Object.values(object)
        return array.length === values.length && values.every(v => array.includes(v));
    };


console.log(compare(["one",2: "three" })); //  true
console.log(compare(["one",2: "three" })); // false

,
const compare = (array,object) => Object.values(object).every(n => array.includes(n));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。