Массив Массив преобразовать в один массив объектов в JavaScript

Найден ответ довольно быстро после публикации этого сообщения.

identifier - это свойство, которое вы ищете.

Из документов:

Используйте эту строку для идентификации уведомлений в вашем приложении. Например, вы можете передать эту строку методу removePendingNotificationRequests (withIdentifiers :), чтобы отменить ранее запланированное уведомление. ...

Для локальных уведомлений этому свойству присваивается значение, переданное инициализатору запроса (см. метод init (identifier: content: trigger :)). Для удаленных уведомлений устанавливается значение ключа apns-collapse-id, указанного в заголовке запроса APN при создании удаленного уведомления. Если значение не задано, система автоматически назначает идентификатор.

-1
задан iAviator 19 January 2019 в 05:29
поделиться

3 ответа

Вы можете использовать , чтобы уменьшить , чтобы построить новый массив, имея 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>

0
ответ дан Alex G 19 January 2019 в 05:29
поделиться

этот код поможет вам объединить все данные в вашем массиве:

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);
0
ответ дан mohammad javad ahmadi 19 January 2019 в 05:29
поделиться

Вот решение:

 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,
            },
        };
    });

Я буду дополнительно оптимизировать его. Но это дает мне именно то, что мне нужно.

0
ответ дан iAviator 19 January 2019 в 05:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: