常用算法总结

js 对象 根据 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"}'

两个JSON数组的交集、并集(数组去重)和补集

假设有两个如下JSON数组:
        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))
       
        // 补集
        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 简洁算法

// 并集
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数组里面字段的值是否等于另一个值


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

JSON 按照某一个字段去重

// JSON 按照某一个字段去重
function FilterByName(data, Name) {   //data是json对象,Name是根据什么字段去重
    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按照多个字段去排序

    //按照多个字段排序
    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个数组的差值

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

对比2个JSON数组 拿到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中去掉相同的,并且把相同的值的别的属性变成数组。

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指定对象

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对象数组某个属性最大值

 var name_value= [{"name":"闵行区","value":20},{"name":"浦东新区","value":30},{"name":"杨浦区","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]);

删除数组中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;
    }

拿到数组中最大的数和最小的数,算出差值

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

数组去空字符串 [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;
        }

数组去除逗号[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;
        }

数组去重

Array.from(new Set(arr));

实现随意颜色

    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 + ')';
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354