例:
let arr = [
{ id: 1, name: 'Alice', age: 20 },
{ id: 2, name: 'Bob', age: 21 },
{ id: 3, name: 'Charlie', age: 20 },
{ id: 4, name: 'David', age: 22 },
{ id: 5, name: 'Eve', age: 23 },
{ id: 6, name: 'Frank', age: 24 }
];
结果:
let arr = [
{ id: 1, name: 'Alice', age: 20 },
{ id: 3, name: 'Charlie', age: 20 },
];
我想过滤出这样的数组形式,有没有什么好的方式处理
let arr = [
{ id: 1, name: 'Alice', age: 20 },
{ id: 2, name: 'Bob', age: 21 },
{ id: 3, name: 'Charlie', age: 20 },
{ id: 4, name: 'David', age: 22 },
{ id: 5, name: 'Eve', age: 23 },
{ id: 6, name: 'Frank', age: 24 },
{ id: 7, name: 'Frank', age: 24 }
];
let result = Object.values(arr.reduce((acc, item) => {
if (!acc[item.age]) acc[item.age] = [item];
else acc[item.age].push(item);
return acc;
}, {})).filter(value => value.length > 1).flat();
console.log(result);
Object.values([
{ id: 1, name: 'Alice', age: 20 },
{ id: 2, name: 'Bob', age: 21 },
{ id: 3, name: 'Charlie', age: 20 },
{ id: 4, name: 'David', age: 22 },
{ id: 5, name: 'Eve', age: 23 },
{ id: 6, name: 'Frank', age: 24 }
].reduce((res, v) => ( (res[v.age] ||= []).push(v), res), {}))
.reduce((res, arr) => arr.length > 1 ? res.concat(arr) : res, [])
function filterArr(arr, params) {
const paramKeys = Object.keys(params);
return arr.filter(item => {
return paramKeys.every(key => {
return item[key] === params[key];
});
});
}
// 调用
const arr = [
{ id: 1, name: 'Alice', age: 20 },
{ id: 2, name: 'Bob', age: 21 },
{ id: 3, name: 'Charlie', age: 20 },
{ id: 4, name: 'David', age: 22 },
{ id: 5, name: 'Eve', age: 23 },
{ id: 6, name: 'Frank', age: 24 }
];
filterArr(arr, { age: 20 }); // length: 2
filterArr(arr, { age: 20, id: 3 }); // length: 1
import { from, toArray } from "ix/iterable";
import { filter, groupBy, map } from "ix/iterable/operators";
function pickSame(arr, f) {
return toArray(
from(arr).pipe(
groupBy(f),
map((x) => toArray(x)),
filter((x) => 1 < x.length)
)
);
}
const arr = [
{ id: 1, name: "Alice", age: 20 },
{ id: 2, name: "Bob", age: 21 },
{ id: 3, name: "Charlie", age: 20 },
{ id: 4, name: "David", age: 22 },
{ id: 5, name: "Eve", age: 23 },
{ id: 6, name: "Frank", age: 24 }
];
console.log(pickSame(arr, (x) => x.age));
codesandbox