鍍金池/ 問答/Linux  HTML/ 如何根據(jù)數(shù)組內(nèi)的元素的相同屬性將相鄰的元素合并?

如何根據(jù)數(shù)組內(nèi)的元素的相同屬性將相鄰的元素合并?

const array = [
    { text: 'a', style: { bold: true }},
    { text: 'b', style: { bold: true }},
    { text: 'c', style: { italic: true, bold: true }},
    { text: 'd', style: { italic: true }},
    { text: 'e', style: { italic: true }},
    { text: 'f', style: { underline: true }},
]

類似這樣的數(shù)組,
期望格式化后是這樣的

const formatArray = [
    { text: 'ab', style: { bold: true }},
    { text: 'c',  style: { italic: true, bold: true }},
    { text: 'de', style: { italic: true }},
    { text: 'f', style: { underline: true }},
]

根據(jù)完全相同的style屬性將text值拼接, text有順序要求,就是數(shù)組的索引,所以只合并相鄰的具有相同style屬性的元素。
請(qǐng)大牛們指點(diǎn)迷津!

回答
編輯回答
蟲児飛

拋磚引玉,簡(jiǎn)單寫了一下,如有需要,注意加上array和text、style屬性是否合法的判斷。

    function format(array) {
        let newArray = [array[0]];
        array.reduce(function (accumulator, currentItem) {
            if (JSON.stringify(accumulator.style) === JSON.stringify(currentItem.style)) {
                newArray[newArray.length - 1].text += currentItem.text;
            } else {
                newArray.push(currentItem);
            }
            return newArray[newArray.length - 1];
        })
        return newArray;
    }
    const array = [
        {text: 'a', style: {bold: true}},
        {text: 'b', style: {bold: true}},
        {text: 'c', style: {italic: true, bold: true}},
        {text: 'd', style: {italic: true}},
        {text: 'e', style: {italic: true}},
        {text: 'f', style: {underline: true}},
    ];
    let result = format(array);
    console.log(result)
2017年12月28日 20:52