Найден ответ довольно быстро после публикации этого сообщения.
identifier
- это свойство, которое вы ищете.
Из документов:
Используйте эту строку для идентификации уведомлений в вашем приложении. Например, вы можете передать эту строку методу removePendingNotificationRequests (withIdentifiers :), чтобы отменить ранее запланированное уведомление. ...
Для локальных уведомлений этому свойству присваивается значение, переданное инициализатору запроса (см. метод init (identifier: content: trigger :)). Для удаленных уведомлений устанавливается значение ключа apns-collapse-id, указанного в заголовке запроса APN при создании удаленного уведомления. Если значение не задано, система автоматически назначает идентификатор.
blockquote>
Вы можете использовать , чтобы уменьшить , чтобы построить новый массив, имея lodash, чтобы проверить, нашли ли вы уже то же подмножество.
const data = [{
subsets: [{
start: '0020', end: '007G',
}, {
start: '0020', end: '007F',
},{
start: '0020', end: '007G',
}],
fontFormat: 'woff2',
src: 'estPath1/',
},{
subsets:[{
start: '0020', end: '007F',
},{
start: '0020', end: '007G',
},{
start: '0020', end: '007G',
}],
fontFormat: 'woff',
src: 'estPath2/',
}];
const merge = (data) =>
data.reduce((acc, { subsets, fontFormat, src }) => {
const found = acc.find(({ subset }) =>
_.isEqual(
_.sortedIndexBy(subset, ({ start, end }) => start - end),
_.sortedIndexBy(subsets, ({ start, end }) => start - end))
);
if (!found) acc.push({ subset: subsets, webFontList: [{ fontFormat, src }] });
else found.webFontList.push({ fontFormat, src });
return acc;
},
[]);
console.log(merge(data));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
этот код поможет вам объединить все данные в вашем массиве:
let test = [
{
subsets:
[
{
start: '0020', end: '007F',
},
{
start: '0020', end: '007G',
},
{
start: '0020', end: '007G',
},
],
fontFormat: 'woff2',
src: 'estPath1/',
},
{
subsets:
[
{
start: '0020', end: '007F',
},
{
start: '0020', end: '007G',
},
{
start: '0020', end: '007G',
},
],
fontFormat: 'woff',
src: 'estPath2/',
},
{
subsets:
[
{
start: '0020', end: '007F',
},
{
start: '0021', end: '007G',
},
{
start: '0020', end: '007G',
},
],
fontFormat: 'woff',
src: 'estPath3/',
}
];
var final = [];
for(var i = 0; i < test.length; i++) {
var object = {subsets : [] , webFontList: []};
object.subsets = test[i].subsets;
object.webFontList.push({fontFormat: test[i].fontFormat, src: test[i].src});
for(var j = i +1; j < test.length; j++) {
if(_.isEqual(test[i].subsets, test[j].subsets)) {
object.webFontList.push({fontFormat: test[j].fontFormat, src: test[j].src});
test.splice(j, 1);
}
}
final.push(object);
}
console.log("final object is : ", final);
Вот решение:
const fontList = params.fontList.map((font) => {
const uniquesubset = _.compact(_.map(_.uniqWith(font.webFontList, (item, itemTwo) => _.isEqual(item.subset, itemTwo.subset)).map(_.property('subset'))));
if (uniquesubset.length > 0) {
const subsets = uniquesubset.map((subset) => {
const webFontList = _.compact(_.map(font.webFontList, webFont => (_.isEqual(webFont.subset, subset) ? _.pick(webFont, ['fontFormat', 'src', ]) : undefined)));
const updatedWebFontList = _.compact(webFontList);
return {
subset,
webFontList: updatedWebFontList,
};
});
return {
subsets,
sourceFont: font.sourceFont,
};
}
return {
sourceFont: font.sourceFont,
subsets: {
webFontList: font.webFontList,
},
};
});
Я буду дополнительно оптимизировать его. Но это дает мне именно то, что мне нужно.