当我有一个对象数组时,如何计算对象属性的唯一值?
let organisations = [
{
"id": 1,
"name": "nameOne",
},
{
"id": 2,
"name": "nameTwo",
},
{
"id": 3,
"name": "nameOne",
}
]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如何计算唯一组织名称的数量。这里的答案是两个,因为有两个唯一的名称。
这不起作用
var counts = this.filteredExtendedDeals.reduce(
(organisations, name) => {
counts[name] = (counts[name] || 0) + 1;
return counts;
},
{}
);
return Object.keys(counts);
Run Code Online (Sandbox Code Playgroud)
您可以将列表缩小为 a Set,然后获取size.
const organisations = [
{ "id": 1, "name": "nameOne" },
{ "id": 2, "name": "nameTwo" },
{ "id": 3, "name": "nameOne" }
];
const uniqueItems = (list, keyFn) => list.reduce((resultSet, item) =>
resultSet.add(typeof keyFn === 'string' ? item[keyFn] : keyFn(item)),
new Set).size;
console.log(uniqueItems(organisations, 'name'));
console.log(uniqueItems(organisations, ({ name }) => name));Run Code Online (Sandbox Code Playgroud)
如果您还想过滤掉null和undefined值:
const organisations = [
{ "id": 1, "name": null },
{ "id": 2, "name": "nameTwo" },
{ "id": 3, "name": undefined }
];
const uniqueItemsNonNull = (list, keyFn) => list.reduce((resultSet, item) =>
(v => v !== null && v !== undefined ? resultSet.add(v) : resultSet)
(typeof keyFn === 'string' ? item[keyFn] : keyFn(item)),
new Set).size;
console.log(uniqueItemsNonNull(organisations, 'name'));
console.log(uniqueItemsNonNull(organisations, ({ name }) => name));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2427 次 |
| 最近记录: |