Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 我需要在映射中获取一个值,以便它的键包含一个值_Javascript_Arrays - Fatal编程技术网

Javascript 我需要在映射中获取一个值,以便它的键包含一个值

Javascript 我需要在映射中获取一个值,以便它的键包含一个值,javascript,arrays,Javascript,Arrays,我想做一些类似的事情: MyMap.set(['milk', 'eggs', 'flour'], 'ingredients'); MyMap.set(['red', 'green', 'blue'], 'colors'); console.log(MyMap.get(ELEMENT THAT INCLUDES eggs)); //expected: ingredients 我尝试过很多东西,比如使用Array.has()和Array.includes(),但我就是做不到。 我在这里和编码方面

我想做一些类似的事情:

MyMap.set(['milk', 'eggs', 'flour'], 'ingredients');
MyMap.set(['red', 'green', 'blue'], 'colors');

console.log(MyMap.get(ELEMENT THAT INCLUDES eggs));
//expected: ingredients
我尝试过很多东西,比如使用Array.has()和Array.includes(),但我就是做不到。
我在这里和编码方面都是新手,如果我搞砸了一些东西或者解决方案非常简单,那么很抱歉。

Map Api不支持任何这种现成的东西。 下面是一个方法,你可以做到这一点

让MyMap=newmap();
MyMap.set([“牛奶”、“鸡蛋”、“面粉”]、“配料”);
MyMap.set(['red'、'green'、'blue']、'colors');
让值HosekeyIncludeText=[];
MyMap.forEach((值,键)=>{
if(图例包括(“蛋”)){
值HosekeyIncludeText.push(值);
}
});
console.log(值HosekeyIncludeText);
//上面的代码返回其键包含给定文本的值数组。
//所以,若在映射中有多个条目,其键包含给定的文本,那个么您将得到一个值数组作为结果。例如
设MyMap2=newmap();
MyMap2.set([‘牛奶’、‘鸡蛋’、‘面粉’、‘配料’);
MyMap2.set(['red','green','blue'],'colors');
MyMap2.set([“红色”、“鸡蛋”、“面粉”]、“配料和颜色”);
让值HosekeyIncludeText2=[];
MyMap2.forEach((值,键)=>{
if(图例包括(“蛋”)){
值HosekeyIncludeText2.push(值);
}
});

console.log(值hosekeyIncludeText2)这看起来困难的原因是该结构不支持您的用例。钥匙必须是精确匹配的。当然,您可以转储整个映射内容,并在每次需要执行查找时对其进行迭代,时间复杂度
O(映射大小*最长数组键)
,这几乎可以忽略数据结构的要点

更好的方法是通过迭代通常与某个值关联的每个元素并对该值执行多个映射来构建映射。这将保留键值语义并支持
O(1)
查找时间

换句话说,不要尝试(伪代码):

建造这个

{key1: val, key2: val, key3: val}
这种方法的缺点是,如果要设置值,则需要对每个可能的键映射执行多次,但这似乎不是您的用例

下面是一个简单完整的示例:

const rawPairData=[
牛奶、鸡蛋、面粉、配料、,
[['红色','绿色','蓝色','颜色'],
];
常量映射=新映射();
for(rawPairData的常数[键,值]){
for(键的常数键){
map.set(key,val);
}
}
console.log(map.get('milk'));

log(Object.fromEntries([…map])使用数组(或任何对象)作为键时,只能使用完全相同的数组检索值。恰好具有相同值的不同数组将不起作用。除此之外,Map API没有实现您所需的功能。您必须获取映射项并自己迭代它们。所有键数组中的项都是唯一的吗?现有答案是次优的,但编写更好的方法取决于此。多了解一些关于您的用例的信息会很好,因为这闻起来像一个。
{key1: val, key2: val, key3: val}