在 .filter 之后返回整个数据集,而不仅仅是过滤的对象

问题描述

假设我正在过滤:

documents = {
    "aggregations": null,"results": [{"firstName": "Sid","lastName": "Villain","gender": "m"},{"firstName": "Dave","lastName": "Jones",{"firstName": "Peggy","lastName": "Sue","gender": "f"}],"summary": {"took": 1,"count": 230}
}

我将过滤对象数组 results。过滤器完成后,我只剩下数组中过滤掉的对象,例如

filteredDocuments = {"firstName": "Sid","gender": "m"}

我不想丢失 "aggregations": null"summary": {"took": 1,"count": 230},那么我怎样才能得到一个类似的数据集减去过滤器中没有的任何东西?

我已经做了一个 stackBlitz 并且过滤器正在运行,但是任何与此类似的过滤器类型都做同样的事情。

this.filteredDocuments = this.documents.results.filter((person) => person.gender === "m")

解决方法

使用 spread syntax 返回对象的副本,同时覆盖(或在其他情况下合并)results 属性。

const documents = {
  "aggregations": null,"results": [{ "firstName": "Sid","lastName": "Villain","gender": "m" },{ "firstName": "Dave","lastName": "Jones",{ "firstName": "Peggy","lastName": "Sue","gender": "f" }],"summary": { "took": 1,"count": 230 }
}

const filteredDocuments = {
  ...documents,results: documents.results.filter((person) => person.gender === "m")
};

console.log(filteredDocuments);

,

您可以使用 Object#assign 克隆对象并将过滤结果分配给该对象的 results 属性:

const documents = {
    "aggregations": null,"results": [{"firstName": "Sid","gender": "m"},{"firstName": "Dave",{"firstName": "Peggy","gender": "f"}],"summary": {"took": 1,"count": 230}
}
const onlyM = Object.assign({},documents);
onlyM.results = documents.results.filter((person) => person.gender === "m")
console.log(onlyM);