首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >想要过滤数组

想要过滤数组
EN

Stack Overflow用户
提问于 2022-04-28 08:07:51
回答 2查看 28关注 0票数 -1

我想要一个具有过滤值的数组。我的数组就像,

代码语言:javascript
运行
复制
let arr=[{name:'trt,tet', id:5},{name:td, id:25},{name:fxg, id:1},{name:fs, id:4},{name:ste, id:41}]

&

代码语言:javascript
运行
复制
let arr1 =[{data:fxg, addr:po 87987},{data:tert, addr:po8798fvd7},{data:trt, addr:po 887},{data:trhd, addr:po 8798787}]

我想要的合成数组是,

代码语言:javascript
运行
复制
let rslt =[data:tert, addr:po8798fvd7},{data:trhd, addr:po 8798787}]

在arr中,对象' name‘也在arr1中,名称为'data’,我不需要这个数组。其中有些包含多个名称。我想过滤它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-28 08:12:05

尝尝这个

代码语言:javascript
运行
复制
let arr=[{name:'trt,tet', id:5},{name:'td', id:25},{name:'fxg', id:1},{name:'fs', id:4},{name:'ste', id:41}]
let arr1 =[{data:'fxg', addr:'po 87987'},{data:'tert', addr:'po8798fvd7'},{data:'trt', addr:'po 887'},{data:'trhd', addr:'po 8798787'}]


const names = arr.flatMap(a => a.name.split(','))

const res = arr1.filter(a => !names.includes(a.data))

console.log(res)

票数 1
EN

Stack Overflow用户

发布于 2022-04-28 08:19:07

这使用了一个Set,它是为O(1)中的查找优化的,因此算法的运行时是O(n),而使用includes()则会导致O(n²)的运行时。

代码语言:javascript
运行
复制
let arr = [
  { name: "trt", id: 5 },
  { name: "td", id: 25 },
  { name: "fxg", id: 1 },
  { name: "fs", id: 4 },
  { name: "ste", id: 41 },
];

let arr1 = [
  { data: "fxg", addr: "po87987" },
  { data: "tert", addr: "po8798fvd7" },
  { data: "trt", addr: "po887" },
  { data: "trhd", addr: "po8798787" },
];

// use array for quick lookups in O(1)
const set = new Set(arr.map(item => item.name));

// filter arr1 adding only items to result that are not in Set
const result = arr1.filter(item => !set.has(item.data))
console.log(result);
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72040113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档