首页 > 解决方案 > Javascript - 获取唯一且排序的数组

问题描述

我有一个包含重复项目的数组。我想过滤该数组以仅返回唯一项,但是必须根据它们在初始数组中的次数对这些项进行排序。

const initialArr = [
  {
    id: 1
  },
  {
    id: 1
  }, 
  {
    id: 2
  },
  {
    id: 1
  },
  {
    id: 3
  },
  {
    id: 3
  },
];

const expectedSortedResult = [
  {
    id: 1
  },
  {
    id: 3
  },
  {
    id: 2
  }
]

标签: javascriptarrayssortingfilter

解决方案


尝试始终发布您的尝试,无论它离解决方案有多远。

您应该研究以下内容(我也用这些解决了它):

减少(创建对象、groupBy 并创建 __count 属性):https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

将其转换回带有Object.values(),的数组,然后

排序(按 __count 排序):https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

然后,如果您不希望在输出中使用该计数属性,则需要删除它,您可以使用 Map 执行此操作:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /阵列/地图

const initialArr = [
  {id: 1},
  {id: 1}, 
  {id: 2},
  {id: 1},
  {id: 3},
  {id: 3},
];

const output = Object.values(initialArr.reduce((aggObj, item) => {      
  if (aggObj[item.id]){
    aggObj[item.id].__count += 1
  }
  else{
    aggObj[item.id] = item;
    aggObj[item.id].__count = 1
  }      
  return aggObj;
}, {}))
      .sort((a,b) => b.__count - a.__count)
      .map(a => {delete a.__count; return a});
      
      
console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读