Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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_Typescript_Dictionary_Angular6 - Fatal编程技术网

Javascript 根据值将键映射到数组中

Javascript 根据值将键映射到数组中,javascript,typescript,dictionary,angular6,Javascript,Typescript,Dictionary,Angular6,根据基于值条件的值将键映射到数组中最有效的方法是什么 例如,我有一个映射,其中包含文件对象作为键,布尔值作为值,如下所示: map = new Map([ [file, true], [file1, true], [file2, false], [file3, true], ]); 如果map value==true,我可以问一下创建文件对象数组的快捷方式是什么吗 预期结果 files=[file,file1,file3] 谢谢你的帮助,谢谢 您可以使用条目获取映射的键

根据基于值条件的值将键映射到数组中最有效的方法是什么

例如,我有一个映射,其中包含文件对象作为键,布尔值作为值,如下所示:

map = new Map([
   [file, true],
   [file1, true],
   [file2, false],
   [file3, true],
]);
如果map value==true,我可以问一下创建文件对象数组的快捷方式是什么吗

预期结果

files=[file,file1,file3]


谢谢你的帮助,谢谢

您可以使用
条目
获取映射的键和值,然后
根据值(条件)是否为真对其进行过滤
,然后
.map
[键,值]
转换为键:

const map=新映射([
['file',true],
['file1',true],
['file2',false],
['file3',true],
]);
常量文件=[…map.entries()]
.filter(([[uu,cond])=>cond)
.map(([key])=>key);

console.log(文件)在这里,一个简单的forEach循环就可以做到这一点

const map=新映射([
['test',true],
['test2',true],
['test3',false],
['test4',true],
]);
常量文件=[];
map.forEach((值、键、映射)=>{
如果(值){
文件。推送(键)
}
});

console.log(文件)
您可以使用
Map.entries
filter
以及
Map
来实现这一点。基本思想是

  • 使用
    Map.entries
  • 将该数组筛选为仅值为
    true
  • 使用“映射”将映射项转换为数组元素
  • 代码看起来像这样

    map.entries().filter(entry=>entry[1]).map(entry=>entry[0]);
    

    上面的答案是有效的,但如果您追求的是最快的,那么使用for循环可能会比原型Map和array方法更快,这可能会令人惊讶

    又名:

    myMap=新映射([
    [“文件”,true],
    [“file1”,true],
    [“file2”,false],
    [“file3”,true],
    ]);
    const faster=(文件)=>{
    常量映射=[…文件]
    const out=[]
    for(设i=0;i
    
    myMap = new Map([
        ["file", true],
        ["file1", true],
        ["file2", false],
        ["file3", true],
     ]);
    
    const fastest = (files) => {
        const map = [...files]
        const out = []
        for (let i=0; i<map.length; i++){
            if (map[i][1]){
               out.push(map[i][0])
            }
        }
        return out
    }
    
    console.log(fastest(myMap))