我從 api 收到以下資料結構:
[
{
cat_id: '10000844',
cat_id_full: '10000844-01',
order: '20',
},
{
cat_id: '10000844',
cat_id_full: '10000844-02',
order: '50',
},
{
cat_id: '50000844',
cat_id_full: '50000844-52',
order: '10',
},
{
cat_id: '80000844',
cat_id_full: '80000844-32',
order: '51',
},
{
cat_id: '80000844',
cat_id_full: '80000844-12',
order: '12',
},
]
清理代碼的完美結果將是這個結果,基本上只回傳按順序排序的非重復陣列:
[
{
cat_id: '10000844',
cat_id_full: '10000844-01',
order: '20',
},
{
cat_id: '50000844',
cat_id_full: '50000844-52',
order: '10',
},
{
cat_id: '80000844',
cat_id_full: '80000844-12',
order: '12',
},
]
但目前它只回傳一個唯一陣列中第一個找到的重復項,使用當前代碼(使用 lodash uniqBy,但它不必是使用 lodash 的一個):
const uniqueCats = uniqBy(cats, 'cat_id');
uj5u.com熱心網友回復:
如何快速減少:
Object.values(a.reduce((acc, current) => {
if(!acc[current.cat_id]) {
acc[current.cat_id] = current
} else {
if (acc[current.cat_id].order > current.order) {
acc[current.cat_id] = current
}
}
return acc},
{}))
uj5u.com熱心網友回復:
嘗試這個
function removeDublicats(arr = [], proprety = "") {
const set = new Set();
const result = [];
for (let i = 0; i < arr.length; i ) {
const item = arr[i];
if (set.has(item[proprety])) continue;
set.add(item[proprety]);
result.push(item);
}
return result;
}
uj5u.com熱心網友回復:
您可以使用Array.prototype.reduce()并使用Object.values()提取陣列結果
代碼:
const cats = [{cat_id: '10000844',cat_id_full: '10000844-01',order: '20',},{cat_id: '10000844',cat_id_full: '10000844-02',order: '50',},{cat_id: '50000844',cat_id_full: '50000844-52',order: '10',},{cat_id: '80000844',cat_id_full: '80000844-32',order: '51',},{cat_id: '80000844',cat_id_full: '80000844-12',order: '12',},]
const uniqBy = (arr, key) => Object.values(
arr.reduce((a, c) => {
a[c[key]] = a[c[key]]?.order < c.order
? a[c[key]]
: c
return a
}, {}))
const uniqueCats = uniqBy(cats, 'cat_id')
console.log(uniqueCats)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/497390.html
標籤:javascript 数组 排序 目的 数据清理
