Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查数组是否包含另一个对象';s的价值观?_Javascript_Arrays_Object - Fatal编程技术网

Javascript 如何检查数组是否包含另一个对象';s的价值观?

Javascript 如何检查数组是否包含另一个对象';s的价值观?,javascript,arrays,object,Javascript,Arrays,Object,我试图使一个函数在所有数组值都存在于对象值中时返回true 我已将对象值转换为一个名为newArray的新数组;但我的问题是如何比较给定数组和新数组 const compare = function (array, object) { const newArray =Object.values(object) //compare here and return true/false }; compare(["one", "two",

我试图使一个函数在所有数组值都存在于对象值中时返回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
我将对象值转换为一个新数组

我认为一个
集合
会更好,因为它有一个具有次线性性能的集合,并且语义很好且清晰。但是获取
集合的最简单方法是通过数组,所以…:-)

一旦设置了
,就需要循环,在这种情况下,可能需要:

every
如果回调始终返回真实值,则返回
true
,或者在回调第一次返回错误值时返回
false
(此时短路,如果答案为“否”,则无需继续查找)

但是,如果您想继续使用数组,可以在
每一个
中使用
包含
。它具有线性性能,但在99.9999%的情况下,性能并不重要:

const compare = (array, object) => {
    const values = Object.values(object);
    return array.every(v => values.includes(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=(数组,对象)=>{
返回Object.values(Object.reduce)(res,cur)=>{
返回res&&array.includes(cur);
}, 1);
};  
log(比较([“一”,“二”,“三”],{0:“一”,1:“二”,2:“三”}));//=>真的

log(比较([“一”,“二”,“四”],{0:“一”,1:“二”,2:“三”}));//=>false
我建议检查数组的长度和值

const
比较=(数组,对象)=>{
常量值=对象。值(对象)
返回array.length==values.length&&values.every(v=>array.includes(v));
};
log(比较([“一”,“二”,“三”],{0:“一”,1:“二”,2:“三”}));//真的

log(比较([“一”,“二”,“四”],{0:“一”,1:“二”,2:“三”}));//false
Object.values(Object.every)(val=>array.indexOf(val)!==-1)
应该比较什么([“一”,“三”,“二],{0:“一”,1:“二”,2:“三”})给定(此处的“三”索引与对象中的键索引不对齐)您是否只有唯一的值?这是否回答了您的问题?你可以,但它不会短路。不过,这并不重要。它也不向读者提供任何语义信息,而
每一个
都能准确地显示正在做的事情。
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;
}
const compare = (array, object) => Object.values(object).every(n => array.includes(n));