js數組對象去重完整工具類

本文是參考了一篇文章後進行的擴展,參考文章地址https://blog.csdn.net/yjltx1234csdn/article/details/93766707

以下代碼可以直接複製,進行工具的使用(本人主學後端,所以js可能寫的差,請見諒!


/**
 * 實現自定義數組對象去重
 * @param arr 去重的數組 前提保證數組中的對象包含需要的去重的標誌屬性
 * @param attributes 自定義的對象的屬性 數組 標誌屬性組
 * @return newArr 根據標誌屬性去重的數組
 */
function customDeweighting (arr,attributes) {
    /*
    1.根據特定的屬性對比,需要先獲取一個新的數組
    2.利用indexof函數對字符串數組進行判斷,如果不存在就加入到新的數組裏面,進行返回
     */

    let newStr = [];
    let newArr =[];
    for (let i=0;i<arr.length;i++){
        let temp = {}; //還是json對象
        let obj = arr[i];
        for(let j=0;j<attributes.length;j++){
            temp[attributes[j]] = obj[attributes[j]];
        }
        let thisStr = JSON.stringify(temp);
        // 去除空格及\t空白字符
        thisStr = thisStr.replace(/(\s|[\\t])/g,'');
        if (newStr.indexOf(thisStr)===-1){
            newStr.push(thisStr);
            newArr.push(arr[i]);
        }
    }
    return newArr;

}
/**
 *add方法,保證一個數組添加以後沒有重複的值,必須保證添加的目的數組是無重複的元素的
 * @param arr 無重複無元素的目的數組
 * @param item 添加的對象
 * @returns {[]}
 */
function addUnique(arr,item) {
    //將數組對象轉換爲數組字符串
    let newStr = arrToString(arr);
    newStr.sort();
    //先放置第一個
    let temp = itemToString(item);
    // 數組去重
    let flag = false;
    for(let i=0;i<newStr.length;i++){
        if(newStr[i]===temp){
            flag = true;
        }
    }
    if (!flag){
        arr.push(item);
    }
    return arr;
}

/**
 * 也是在一個數組裏面添加一個元素,但是arr是包含有重複元素的
 * @param arr 包含有重複元素的目的數組
 * @param item 要添加的元素
 * 備註 感覺這個方法沒神魔用
 */
function addUniqueArr(arr,item) {
    arr.push(item);
   return uniqueObject(arr);
}
/**
 * 數組去重主方法
 * @param arr 進行去重的數組
 * @returns {[]}
 */
function uniqueObject(arr){
    //存放的是字符串形式的數組。
    let tempArr = [];
    //將數組對象轉成數組字符串。
    let newStr =arrToString(arr);
    newStr.sort();

    //先放置第一個
    let temp=newStr[0];
    tempArr.push(temp);
    // 數組去重
    for(let i=1;i<newStr.length;i++){
        if(newStr[i]!==temp){
            temp=newStr[i];  //放置到集合裏面。
            tempArr.push(newStr[i]);
        }
    }
    //上面,集合還是字符串形式的數組,需要轉換成json對象的形式。
    let newArr = [];
    // 新數組字符串轉成數組對象
    for(let i=0;i<tempArr.length;i++){
        newArr.push(JSON.parse(tempArr[i]));
    }
    return newArr;
}

/**
 *將數組轉換爲 字符串數組
 * @param arr 對象數組
 * @returns {Array} 轉換成字符串的數組
 */
function arrToString(arr){
    let newArr = [];
    if(arr.length !== 0){
        for(let i=0;i<arr.length;i++){ //對每一個對象數據進行處理。
            //將每一個對象裏面的屬性key 進行重新排序,變成新的對象。
            let thisStr = itemToString(arr[i]);
            //裏面放置字符串
            newArr.push(thisStr);
        }
    }
    return newArr;
}

/**
 * 將元素轉換爲字符串
 * @param item
 * @returns {string}
 */
function itemToString(item) {
    //將每一個對象裏面的屬性key 進行重新排序,變成新的對象。
    let thisObj = sortObject(item);
    //將json對象,轉換成字符串
    let thisStr = JSON.stringify(thisObj);
    // 去除空格及\t空白字符
    thisStr = thisStr.replace(/(\s|[\\t])/g,'');
    return thisStr;
}

/**
 *
 * @param obj 對象
 * @returns 將對象按照key值進行排序。
 */
function sortObject(obj){
    let keyArr = [];
    for(let item in obj){ //把所有的key放置在一個數組裏面。
        keyArr.push(item);
    };
    keyArr.sort(); //排序,按照字符進行排序。
    let newObj = {}; //還是json對象
    for(let i=0;i<keyArr.length;i++){
        newObj[keyArr[i]] = obj[keyArr[i]]
    }
    //處理成 鍵=值的數組形式。
    //console.log("值是:"+JSON.stringify(newObj));
    return newObj;
}

以上方法親測有效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章