1. 程式人生 > 其它 >js對陣列中相同物件元素進行去重

js對陣列中相同物件元素進行去重

技術標籤:前端Javascript陣列javascriptnode.js

js對陣列中相同物件元素進行去重,裡面物件相同id,其他不同屬性進行文字疊加

陣列如下

let groupList=[
            {
                id:1001,
                account:"accounr1",
                role:0,
                name:"UI",
                phone:"0000",
                email:
"[email protected]" }, { id:1002, account:"accounr1", role:0, name:"分組5", phone:"0000", email:"[email protected]" }, {
id:1002, account:"accounr1", role:0, name:"測試", phone:"0000", email:"[email protected]" } ];

當前顯示:
在這裡插入圖片描述

需要呈現的樣式

在這裡插入圖片描述
思路:
建立新的空陣列,
迴圈舊陣列,拿到每個物件,如果 通過相同的id屬性去查詢物件中的某個key是否包含相同的屬性名,而value不同,

最後加入到新陣列中 返回出去.

// 資料合併    array:需合併的資料
function arrMerge(array) {
    // 儲存新陣列
    let newArr = [];
    array.forEach(item => {
        // 儲存判斷結果
        let res = newArr.isExist(item.id, "id");
        // 若不存在新陣列中,則直接追加進新陣列
        if (res == -1) {
            newArr.push(item);
        } else {
            // 若存在,則將除id外的欄位追加進新陣列中
            for (var key in newArr[res]) {

                // if (key == "id") continue;
                if (newArr[res][key] == item[key]) continue;

                newArr[res][key] += item[key];
            };
        };
    });
    return newArr;
};

// 判斷元素是否存在陣列中物件屬性中  value:元素   key:物件屬性   
Array.prototype.isExist = function(value, key) {
    for (let i = 0, len = this.length; i < len; i++) {
        // 若存在,則返回對應的索引
        if (this[i][key] === value) {
            return i;
        }
    }
    // 否則返回 -1
    return -1;
}

console.log(arrMerge(groupList));

你get了啵 T_T