Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Reactjs - Fatal编程技术网

Javascript 基于一个特性的唯一性筛选数组对象

Javascript 基于一个特性的唯一性筛选数组对象,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我要处理的情况是,我有一个对象数组,我想过滤到一个数组,其中对象对于保留最后一个实例的一个属性是唯一的 例如,假设我有一个文件数组,如下所示: let files = [ { filename: "filename.txt", uploadedBy: "Bob", comment: "Gee whiz" }, filename: "filename.txt",

我要处理的情况是,我有一个对象数组,我想过滤到一个数组,其中对象对于保留最后一个实例的一个属性是唯一的

例如,假设我有一个文件数组,如下所示:

let files = 
     [
        {
          filename: "filename.txt",
          uploadedBy: "Bob",
          comment: "Gee whiz"
        },
          filename: "filename.txt",
          uploadedBy: "Jane",
          comment: "Golly"
        },
          filename: "otherFile.txt",
          uploadedBy: "Bob",
          comment: "Shucks"
        },
          filename: "filename.txt",
          uploadedBy: "Henry",
          comment: "Gee Willikers"
        },
     ]
我想要具有不同文件名的对象,我想要每个文件名的最后一个实例

     [
          filename: "otherFile.txt",
          uploadedBy: "Bob",
          comment: "Shucks"
        },
          filename: "filename.txt",
          uploadedBy: "Henry",
          comment: "Gee Willikers"
        },
     ]
有没有一种简洁的方法可以做到这一点?我所能想到的就是一个相当长的方法,首先
映射
数组以获得文件名,然后找到每个文件名的最后一个实例或其他东西

以下问题类似,但保留第一个值而不是最后一个值:


您可以首先从数组中只获取唯一的文件名,然后简单地映射它们并查找反转文件数组中的第一个元素

const f=[{“filename”:“filename.txt”,“uploadedBy”:“Bob”,“comment”:“Gee whiz”},{“filename”:“filename.txt”,“uploadedBy”:“Jane”,“comment”:“Golly”},{“filename”:“otherFile.txt”,“uploadedBy”:“Shucks”},{“filename”:“filename.txt”,“uploadedBy”:“Henry”,“comment”:“Gee Willikers”}.reverse();
const unique=[…新集合(f.map(({filename})=>filename))]
.map((名称)=>f.find(({filename})=>filename==name));

console.log(唯一)缩小为一个映射,并使用
文件名
作为键来设置项目,然后将
映射.values()
迭代器展开回一个数组:

const files=[{“filename”:“filename.txt”,“uploadedBy”:“Bob”,“comment”:“Gee whiz”},{“filename”:“filename.txt”,“uploadedBy”:“Jane”,“comment”:“Golly”},{“filename”:“otherFile.txt”,“uploadedBy”:“Shucks”},{“filename”:“filename.txt”,“uploadedBy”:“Henry”,“comment”:“Gee Willikers”}]
常量结果=[。。。
files.reduce((m,o)=>m.set(o.filename,o),newmap())
.values()]
console.log(result)
您可以使用一个,其中每个唯一的
文件名作为键,文件对象作为值。如果找到另一个具有相同
文件名的条目
,它将覆盖以前的值。因此,这将永远是最后一次发生。然后获取映射到文件对象的结果

const files=[{filename:“filename.txt”,上传人:“Bob”,评论:“Gee whiz”},{filename:“filename.txt”,上传人:“Jane”,评论:“Golly”},{filename:“otherFile.txt”,上传人:“Bob”,评论:“Shucks”},{filename:“filename.txt”,上传人:“Henry”,评论:“Gee Willikers”},];
const map=new map(files.map(f=>[f.filename,f]),
unique=Array.from(map.values());
console.log(唯一)
 function onlyUnique(value, index, self) { 
    return self.indexOf(value) === index;
}

// usage example:
var a = ['a', 1, 'a', 2, '1'];
var unique = a.filter( onlyUnique ); // returns ['a', 1, 2, '1']