想过滤一个数组
want to filter an array
我想获得一个包含过滤值的数组。
我的阵列就像,
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}]
我想要的结果数组是,
let rslt =[data:tert, addr:po8798fvd7},{data:trhd, addr:po 8798787}]
在 arr 中的对象 'name' 也在 arr1 中,名称为 'data' 我不需要那个数组。其中一些包含多个名称。我要过滤一下。
试试这个
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)
这将使用 Set
which is optimized for lookups in O(1)
and therefore the runtime of the algorithm is O(n)
in contrast to using includes()
,这将导致运行时间为 O(n²)
。
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);
.as-console-wrapper { max-height: 100% !important; top: 0; }
我想获得一个包含过滤值的数组。 我的阵列就像,
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}]
我想要的结果数组是,
let rslt =[data:tert, addr:po8798fvd7},{data:trhd, addr:po 8798787}]
在 arr 中的对象 'name' 也在 arr1 中,名称为 'data' 我不需要那个数组。其中一些包含多个名称。我要过滤一下。
试试这个
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)
这将使用 Set
which is optimized for lookups in O(1)
and therefore the runtime of the algorithm is O(n)
in contrast to using includes()
,这将导致运行时间为 O(n²)
。
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);
.as-console-wrapper { max-height: 100% !important; top: 0; }