js 数组操作合集(主要针对对象数组)

1,根据对象中元素 查找对象数组中对应的元素

//_arr 目标数组    pro 数组中 要查询的对象元素中的字段
function findObjWithArr(_arr, pro) {

var length = _arr.length;

for (var i =0; i < length; i++) {

    if (_arr[i].provinces == pro) {

        return _arr[i];        }

    }

}

2,删除数组中指定对象的元素 并返回删除后的数组

//_arr 目标数组    pro 数组中 要删除的对象元素中的字段
function removeObjWithArr(_arr, pro) {
    var length = _arr.length;
    for (var i = 0; i < length; i++) {
        if (_arr[i].provinces == pro) {
            _arr.splice(i, 1); //删除下标为i的元素
            return _arr;
        }
    }
}

3,js数组实现权重概率分配,支持数字比模式(支持2位小数)和百分比模式(不支持小数,最后一个元素多退少补)

function weight_rand(arr) {
//参数arr元素必须含有weight属性,参考如下所示
//var arr=[{name:'1',weight:1.5},{name:'2',weight:2.5},{name:'3',weight:3.5}];
//var arr=[{name:'1',weight:'15%'},{name:'2',weight:'25%'},{name:'3',weight:'35%'}];
//求出最大公约数以计算缩小倍数,perMode为百分比模式
var per;
var maxNum = 0;
var perMode = false;
//自定义Math求最小公约数方法
Math.gcd = function (a, b) {
    var min = Math.min(a, b);
    var max = Math.max(a, b);
    var result = 1;
    if (a === 0 || b === 0) {
        return max;
    }
    for (var i = min; i >= 1; i--) {
        if (min % i === 0 && max % i === 0) {
            result = i;
            break;
        }
    }
    return result;
};

//使用clone元素对象拷贝仍然会造成浪费,但是使用权重数组对应关系更省内存
var weight_arr = new Array();
for (var i = 0; i < arr.length; i++) {
    if ('undefined' != typeof(arr[i].weight)) {
        if (arr[i].weight.toString().indexOf('%') !== -1) {
            per = Math.floor(arr[i].weight.toString().replace('%', ''));
            perMode = true;
        } else {
            per = Math.floor(arr[i].weight * 100);
        }
    } else {
        per = 0;
    }
    weight_arr[i] = per;
    maxNum = Math.gcd(maxNum, per);
}
//数字比模式,3:5:7,其组成[0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2]
//百分比模式,元素所占百分比为15%,25%,35%
var index = new Array();
var total = 0;
var len = 0;
if (perMode) {
    for (var i = 0; i < arr.length; i++) {
        //len表示存储arr下标的数据块长度,已优化至最小整数形式减小索引数组的长度
        len = weight_arr[i];
        for (var j = 0; j < len; j++) {
            //超过100%跳出,后面的舍弃
            if (total >= 100) {
                break;
            }
            index.push(i);
            total++;
        }
    }
    //使用最后一个元素补齐100%
    while (total < 100) {
        index.push(arr.length - 1);
        total++;
    }
} else {
    for (var i = 0; i < arr.length; i++) {
        //len表示存储arr下标的数据块长度,已优化至最小整数形式减小索引数组的长度
        len = weight_arr[i] / maxNum;
        for (j = 0; j < len; j++) {
            index.push(i);
        }
        total += len;
    }
}
//随机数值,其值为0-11的整数,数据块根据权重分块
var rand = Math.floor(Math.random() * total);
//console.log(index);
return arr[index[rand]];

}

4,js数组根据特定元素排序

function compare(property){
return function(a,b){
    var value1 = a[property];
    var value2 = b[property];
    return value1 - value2;
    }
 }
  arr.sort(compare("age")); //升序
  arr.sort(compare("age")).reverse();//降序
 arr.sort(compare("age")).slice(0,5);// 排序完取前5个

后续会继续补充,好用快捷

你可能感兴趣的