微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 .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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。