Конечные точки Google, использующие только внутри App Engine

Это универсальное решение, которое использует сокращение, позволяет отображать и поддерживает порядок вставки.

items : массив

mapper : Унарная функция, которая отображает элемент в критерии, или пустая для отображения самого элемента.

function distinct(items, mapper) {
    if (!mapper) mapper = (item)=>item;
    return items.map(mapper).reduce((acc, item) => {
        if (acc.indexOf(item) === -1) acc.push(item);
        return acc;
    }, []);
}

Использование

const distinctLastNames = distinct(items, (item)=>item.lastName);
const distinctItems = distinct(items);

Вы можете добавить это в свой Array prototype и оставить параметр items , если это ваш стиль ...

const distinctLastNames = items.distinct( (item)=>item.lastName) ) ;
const distinctItems = items.distinct() ;

Вы также можете использовать набор вместо массива для ускорения сопоставления.

function distinct(items, mapper) {
    if (!mapper) mapper = (item)=>item;
    return items.map(mapper).reduce((acc, item) => {
        acc.add(item);
        return acc;
    }, new Set());
}
0
задан Suvitruf 26 February 2015 в 16:07
поделиться