常用算法总结

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

数组去除逗号[1,,,2,,,3]

       function  RemoveCommaArray(arr){
            this.arr=arr;
            var result=[]
            for(var i=0;i

数组去重

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 + ')';
    }

你可能感兴趣的:(常用算法总结)