常用算法總結(jié)

js 對(duì)象 根據(jù) key 排序

const unordered = {
  'b': 'foo',
  'c': 'bar',
  'a': 'baz'
};

console.log(JSON.stringify(unordered));
// → '{"b":"foo","c":"bar","a":"baz"}'

const ordered = {};
Object.keys(unordered).sort().forEach(function(key) {
  ordered[key] = unordered[key];
});

console.log(JSON.stringify(ordered));
// → '{"a":"baz","b":"foo","c":"bar"}'

兩個(gè)JSON數(shù)組的交集臭挽、并集(數(shù)組去重)和補(bǔ)集

假設(shè)有兩個(gè)如下JSON數(shù)組:
        var a = [{a: 1}, {a: 3}, {a: 5}];
        var b = [{a: 1}, {a: 2}, {a: 3}, {a: 4}, {a: 5}];
        
        //交集
        var result = b.filter(x=>{
            return a.some(y=>{
                return x.a==y.a;
            })
        })
        console.log(result)  //[{a: 1}, {a: 3}, {a: 5}]
       
       
       //并集(去重)
       var c = a.concat(b);
       function removeRepeat(arr){
           let result = [];
           let temp = {}
           arr.forEach(item=>{
               if(!temp[item.a]){
                   result.push(item)
                   temp[item.a] = true;
               }
           })
           return result
       }
       console.log(removeRepeat(c))
       
        // 補(bǔ)集
        var c = a.concat(b);
        var result = c.filter(x=>{
            return !a.some(y=>{
                return x.a==y.a;
            })&&b.some(z=>{
                return x.a==z.a;
            })
        })
        console.log(result) //[{a: 2},{a: 4}]

ES6 簡(jiǎn)潔算法

// 并集
let union = a.concat(b.filter(v => !a.includes(v))) // [1,2,3,4,5]
// 交集
let intersection = a.filter(v => b.includes(v)) // [2]
// 差集
let difference = a.concat(b).filter(v => a.includes(v) && !b.includes(v)) // [1,3]

js 判斷json數(shù)組里面字段的值是否等于另一個(gè)值


image.png
const item = res.list.find(({us_id}) => '7' === us_id);
if (item){
  console.log(item)
} 

JSON 按照某一個(gè)字段去重

// JSON 按照某一個(gè)字段去重
function FilterByName(data, Name) {   //data是json對(duì)象,Name是根據(jù)什么字段去重
    var map = {},
      dest = [];
    for (var i = 0; i < data.length; i++) {
        var ai = data[i];
        if (i == 0) {
            dest.push(ai);
        } else {
            var filterData = dest.filter(function (e) {
                return e[Name] == ai[Name];
            })
            if (filterData.length == 0) {
                dest.push(ai);
            }
        }
    }
    return dest;
}

JSON按照多個(gè)字段去排序

    //按照多個(gè)字段排序
    function compare(name, minor) {
        return function(o, p) {
            var a, b;
            if (o && p && typeof o === 'object' && typeof p === 'object') {
                a = o[name];
                b = p[name];
                if (a === b) {
                    return typeof minor === 'function' ? minor(o, p) : 0;
                }
                if (typeof a === typeof b) {
                    return a < b ? -1 : 1;
                }
                return typeof a < typeof b ? -1 : 1;
            } else {
                thro("error");
            }
        }
    }

拿到2個(gè)數(shù)組的差值

a.filter(key => !b.includes(key))

對(duì)比2個(gè)JSON數(shù)組 拿到MAC_NBR相同的差值

     var resultArrSole = [];
                        for (var i = 0; i < dataArrEndArr.length; i++) {
                            var obj = dataArrEndArr[i];
                            var num = obj.MAC_NBR;
                            var flag = false;
                            for (var j = 0; j < dataArrGroup.length; j++) {
                                var aj = dataArrGroup[j];
                                var n = aj.MAC_NBR;
                                if (n == num) {
                                    flag = true;
                                    break;
                                }
                            }
                            if (!flag) {
                                resultArrSole.push(obj);
                            }
                        }

json中去掉相同的,并且把相同的值的別的屬性變成數(shù)組脉让。

dataArrGroup = dataArrGroup.map(function(item, index, arr) {
                const i = arr.find(_item => item.group === _item.group);
                if (i !== item) {
                    i.name.push(item.name);
                    i.value.push(item.value);
                    return undefined;
                } else {
                    i.name = [i.name];
                    i.value = [i.value];
                    return i;
                }
            }).filter(item => item !== undefined);

刪除JSON指定對(duì)象

var array = [
            {
                id : 1,
                flag : 1
            },
            {
                id : 2,
                flag : 2
            },
            {
                id : 3,
                flag : 1
            }
    ];
var result = array.filter(function(item){ return item.flag != 2});
console.log(result);

刪除JSON相同字段

    function unique(list) {
        var arr = [];
        for (var i = 0; i < list.length; i++) {
            if (i == 0) arr.push(list[i]);
            b = false;
            if (arr.length > 0 && i > 0) {
                for (var j = 0; j < arr.length; j++) {
                    if (arr[j].COMPANY_NAME == list[i].COMPANY_NAME) {
                        b = true;
                        //break;
                    }
                }
                if (!b) { arr.push(list[i]); }
            }
        }
        return arr;
    }

JS獲取JSON對(duì)象數(shù)組某個(gè)屬性最大值

 var name_value= [{"name":"閔行區(qū)","value":20},{"name":"浦東新區(qū)","value":30},{"name":"楊浦區(qū)","value":10}]
    var list = new Array();
    for(var i in name_value){
    list.push(name_value[i].value);
    }
    list.sort(function(num1,num2){
    return num1-num2;
    })
    var maxcnt= eval(list[list.length-1]);

刪除數(shù)組中text一樣的

    Array.prototype.removeRepeatAttr = function() {
        var tmp = {},
            b = [],
            a = this;
        for (var i = 0; i < a.length; i++) {
            if (!tmp[a[i].text]) {
                b.push(a[i]);
                tmp[a[i].text] = !0;
            }
        };
        return b;
    }

拿到數(shù)組中最大的數(shù)和最小的數(shù)凤跑,算出差值

    var dataArr = [112,2,3,111,4,5,8,4,1];
    function countArr(a){
        return Math.max.apply(Array,a) - Math.min.apply(Array,a);
    }
   console.log(countArr(dataArr));

數(shù)組去空字符串 [1,2,"",3,""]

       function  RemoveEmptyArray(arr){
            this.arr=arr;
            var result=[]
            for(var i=0;i<this.arr.length;i++){
                this.arr[i]!=""&&result.push(this.arr[i])
            }
            return result;
        }

數(shù)組去除逗號(hào)[1,,,2,,,3]

       function  RemoveCommaArray(arr){
            this.arr=arr;
            var result=[]
            for(var i=0;i<this.arr.length;i++){
                this.arr[i]!=undefined&&result.push(this.arr[i])
            }
            return result;
        }

數(shù)組去重

Array.from(new Set(arr));

實(shí)現(xiàn)隨意顏色

    function randomColor() {
        var r = parseInt(Math.random() * 256, 10) + 1;
        var g = parseInt(Math.random() * 256, 10) + 1;
        var b = parseInt(Math.random() * 256, 10) + 1;
        return 'rgb(' + r + ',' + g + ',' + b + ')';
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搀愧,一起剝皮案震驚了整個(gè)濱河市腮出,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹦误,老刑警劉巖劫拢,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肉津,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡舱沧,警方通過查閱死者的電腦和手機(jī)妹沙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熟吏,“玉大人距糖,你說我怎么就攤上這事∏K拢” “怎么了悍引?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)帽氓。 經(jīng)常有香客問我趣斤,道長(zhǎng),這世上最難降的妖魔是什么黎休? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任浓领,我火速辦了婚禮,結(jié)果婚禮上势腮,老公的妹妹穿的比我還像新娘镊逝。我一直安慰自己,他們只是感情好嫉鲸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歹啼,像睡著了一般玄渗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狸眼,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天藤树,我揣著相機(jī)與錄音,去河邊找鬼拓萌。 笑死岁钓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的微王。 我是一名探鬼主播屡限,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼炕倘!你這毒婦竟也來了钧大?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤罩旋,失蹤者是張志新(化名)和其女友劉穎啊央,沒想到半個(gè)月后眶诈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓜饥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年逝撬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乓土。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宪潮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帐我,到底是詐尸還是另有隱情坎炼,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布拦键,位于F島的核電站谣光,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏芬为。R本人自食惡果不足惜萄金,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望媚朦。 院中可真熱鬧氧敢,春花似錦、人聲如沸询张。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽份氧。三九已至唯袄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜗帜,已是汗流浹背恋拷。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厅缺,地道東北人蔬顾。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像湘捎,于是被迫代替她去往敵國(guó)和親诀豁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348