问题描述
目标:返回一个数组,列出对象中某个特定键的唯一值。
const people = [
{id: 1,name: 'Barb',gender: 'female'},{id: 2,name: 'Carl',gender: 'male'},{id: 3,name: 'John',{id: 4,name: 'Jane',{id: 5,name: 'Pete',{id: 6,name: 'Annie',{id: 7,name: 'Katie',{id: 8,name: 'Sally',{id: 9,name: 'Steve',]
所需的输出:
['male','female']
解决方法
您可以使用 Set Object
返回一个数组,其中列出了对象中某个特定键的唯一值。
- 创建新集合。
- 使用
forEach()
方法遍历数组。 - 检查指定的属性并将值添加到 Set
- 最后,返回唯一值数组。
const people = [
{ id: 1,name: 'Barb',gender: 'female' },{ id: 2,name: 'Carl',gender: 'male' },{ id: 3,name: 'John',{ id: 4,name: 'Jane',{ id: 5,name: 'Pete',{ id: 6,name: 'Annie',{ id: 7,name: 'Katie',{ id: 8,name: 'Sally',{ id: 9,name: 'Steve',];
const unique = (key,array) => {
const set = new Set();
array.forEach(
(x) => Object.prototype.hasOwnProperty.call(x,key) && set.add(x[key])
);
return [...set];
};
console.log(unique('gender',people));
可以使用 reduce() 和 Set 将类别键简化为唯一值,如下所示:
返回:['female','male']
const people = [
{id: 1,gender: 'female'},{id: 2,gender: 'male'},{id: 3,{id: 4,{id: 5,{id: 6,{id: 7,{id: 8,{id: 9,]
const genders = people.reduce((aSex,currItem) => {
aSex.push(currItem.gender);
return aSex
},[])
let unique = [...new Set(genders)];
console.log(unique)
类似地,可以像这样返回键“类别”中每个唯一值的实例数:
返回:{"female": 3,"male": 4}
const people = [
{id: 1,]
const genderCount = people.reduce((oSex,currItem) => {
oSex[currItem.gender] = (oSex[currItem.gender] || 0) + 1
return oSex
},{})
console.log(genderCount)