Js实现Object按照值的某些字段(数值类型)的大小进行排序

关于layui中float类型的字段排序问题(补位0的处理方法) 1 layui的排序 我的需求是按里程排序:里程为float类型 1.000 甲方为离火车站中心位1公里0米 如 2.200 则为离火车站中心位2公里的200米处 按这个字段排序时layui 1.000会默认为字符串,按此里程字段排序会混乱,是按 unicode字符串排序的 解决方案: 1 找到table.js 这是layui的表格js文件 我在里面找到 if(options.autoSort){ if(type === ‘asc’){ //升序 thisData = layui.sort(data 阅读详情

最近,有个需求:将一个Object对象,按照值的某些字段(数值型)的大小来进行排序。感觉这个需求也算是有点用,也有点意思吧!就记录分享一下。

看代码,写的很挫,将就着看吧。能用就行,哈哈!

var objs = {
    "aaa": { name: "小明", age: 30, gn: 7 },
    "bbb": { name: "小红", age: 20, gn: 8 },
    "ccc": { name: "小花", age: 40, gn: 3 }
}

/**
 * 
 * @param {*} obj Object对象
 * @param {*} propertys 值中的属性列表(数组)
 * @param {*} desc 是否是降序 (升序:从小到大;降序:从大到小)
 */
function ObjSort(obj, propertys, desc) {

    let same = function (obj1, obj2) {
        var o1 = obj1 instanceof Object;
        var o2 = obj2 instanceof Object;
        if (!o1 || !o2) {/*  判断不是对象  */
            return obj1 === obj2;
        }

        if (Object.keys(obj1).length !== Object.keys(obj2).length) {
            return false;
        }

        for (var attr in obj1) {
            var t1 = obj1[attr] instanceof Object;
            var t2 = obj2[attr] instanceof Object;
            if (t1 && t2) {
                return same(obj1[attr], obj2[attr]);
            } else if (obj1[attr] !== obj2[attr]) {
                return false;
            }
        }
        return true;
    }

    var arr = [];
    for (var key in obj) {
        arr.push(obj[key]);
    }

    arr.sort((a, b) => {
        let valuesA = [];
        let valuesB = [];
        for (let i = 0; i < propertys.length; i++) {
            valuesA.push(a[propertys[i]]);
            valuesB.push(b[propertys[i]]);
        }

        let sumA = 0;
        let sumB = 0;

        valuesA.forEach(item => {
            sumA += item;
        });

        valuesB.forEach(item => {
            sumB += item;
        })

        if (desc == true) {
            // 降序排列  从大到小
            return sumB - sumA;
        } else {
            // 升序排列  从小到大
            return sumA - sumB;
        }
    });

    let oldObj = obj;

    let obj2 = {};
    let maxIdx = 0;//最大值 的 index
    let minIdx = 0;//最小值 的 index

    if (desc) {//小到大
        maxIdx = arr.length - 1;
        minIdx = 0;
        while (maxIdx > minIdx) {
            for (let key in oldObj) {
                if (same(oldObj[key], arr[minIdx])) {
                    let str = JSON.stringify(arr[minIdx]);
                    obj2[str] = key;
                    if (maxIdx > minIdx) {
                        minIdx++;
                    }
                }
            }
        }
    } else {//大到小
        maxIdx = 0;
        minIdx = arr.length - 1;
        while (maxIdx < minIdx) {
            for (let key in oldObj) {
                console.log(oldObj[key]);
                console.log(arr[maxIdx]);
                if (same(oldObj[key], arr[maxIdx])) {
                    let str = JSON.stringify(arr[maxIdx]);
                    obj2[str] = key;
                    if (maxIdx < minIdx) {
                        maxIdx++;
                    }
                }
            }
        }
    }

    let newObj = {};
    for (let key in obj2) {
        newObj[obj2[key]] = JSON.parse(key);
    }

    return newObj;
}

let newObjs = ObjSort(objs, ["gn", "age"], true);

console.log(newObjs);

可以看到,传入的propertys是一个数组,有gn、age两个属性。那么值的排序依据就是这个属性数组对应的值之和。

运行截图:
在这里插入图片描述

最后特别注意:
当对象的key(键)为数字时,Object会自动排序。,本次栗子不适用于key为数字的场景。

数学建模传染病模型_【数学建模】之传染病模型 点击【拇指笔记】,关注我的公众号。SE模型缺点:没有考虑接触到的人中还有一部分病人,所以所有人并不会全部被感染。建立模型:已感染人数(病人)每个病人每天有效接触(足以使人致病)人数为根据(1)(2)可以建立模型:等式两边同时除以\Delta t由导数定义有同时,取\Delta t = 1天由(1)(5)两式可得最终的模型:Logistic模型缺点:区分已感染者(病人)和未感染者(健康人)... 阅读详情

相关推荐

OPTISYSTEM实战指南:线性调频连续波激光雷达系统仿真设计

本文提供了一份基于OPTISYSTEM软件的线性调频连续波激光雷达系统仿真实战指南。文章详细阐述了从软件界面熟悉、核心参数设置,到发射端、信道模型、相干接收端完整系统搭建的全过程,并介绍了性能优化与高级仿真技巧,旨在帮助读者快速掌握利用OPTISYSTEM进行低成本、高效率激光雷达系统设计与验证的方法。

weixin_29288313的博客 296

js数据类型对象(Object)自动排序问题

前言 这两天碰到一个问题。发现游戏(塔防类游戏)中炮塔寻怪算法有误,炮塔无法准确的找到最危险的怪物(也就是射程范围内离终点最近)。最后查看代码发现,以前怪物查询算法只需查询最危险的怪物,所以遍历所有的怪物,记录最危险那只就可以了。后来策划新增需求,炮塔需要短时间内陆续攻击最危险的N只怪。所以算法上就改成先将所有怪物排序,再取所需的怪物。因为排序有使用到两个变量排序用的 怪物剩余路程 和 怪物实例 。考虑到数组存储不方便,而且需要特别的写排序代码。想到Object是存在Key自动排序功能的,所以使用了一个Ob

ccnacyq的专栏 6447

Avellaneda & Stoikov’s market-making strategy 工程化处理

前2篇文章详细介绍了AS存货模型的做市策略,这次对于这些公式里面一些希腊字母的取值是如何计算的,如何做工程化并应用到生产环境中做一些说明。这个里面有一些重要参数:很直观,可以直接取值的有:s = current market mid price (中间价,也就是【最佳卖价+最佳买价】/2)q = quantity of assets in inventory of base asset (也就是买入多少价值的股票数量)

weixin_42480337的博客 7068

js:Object对象按照key的升序排序

将Object类型的key,转为Array排序,再将结果转为Object。js的Object对象类型,不能直接排序,不过Array是可以排序的。

彭世瑜的博客 2426

32位MIPS流水线CPU设计

32位MIPS流水线CPU设计(vivado)

m0_51320209的博客 3199

【DeepSeek+Office/WPS】智能办公新时代的全新利器

DeepSeek是一家专注于通用人工智能技术研发的中国科技公司,其核心产品DeepSeek-R1是一款开源的推理大模型,专注于复杂任务的高效处理,支持智能对话、文本生成、语义理解、计算推理、代码生成与补全等多种应用场景。作为国产、免费、开源且强大的AI平台,DeepSeek不仅致力于为终端用户提供高质量的智能服务,还为开发者提供了一整套完善的技术解决方案,帮助他们快速构建和部署自己的智能应用。

2303_77200324的博客 2791

JS 利用Object中的某一个值进行排序

以下示例中this.uploadData[st]代表需要进行排序的Objectfrequence表示Object中根据frequence来排序1.降序示例 结果展示 2.升序示例 结果展示

小懒魔王的博客 703

3D iToF深度分辨率测量

本文展示了RGB-D传感器在三维测量中的高精度表现。标靶深度图显示其具备清晰、低噪、无干扰的特性,点云数据完整度高且轮廓分明。该技术已成功应用于物流(体积测量误差<1%)、工业(高反光部件装配检测)和农业(果蔬成熟度分级)等领域,验证了其硬件和算法的可靠性,能够满足不同场景下的三维测量需求。

dream it possible 252

JS对象排序

在JavaScript中,对于对象排序,我们首先需要明确对象本身并不能被直接排序。对象中的键值对并没有特定的顺序,而且键总是按照它们被添加到对象时的顺序排列。然而,我们可以通过将对象转化为数组,然后对数组进行排序,最后再将数组转化回对象,以实现"排序"的效果。注意,上面的排序是基于键(key)的字典序,如果你需要基于值进行排序,可以修改排序函数中的比较函数。

Monkey 1029

使用 MATLAB/Simulink + Simscape Electrical,构建一个含储能的微电网系统,实现储能系统与并网逆变器的协同控制

摘要:本文基于Simulink平台,详细介绍了微电网中储能系统与并网逆变器的协同控制建模与仿真方法。主要内容包括:1)构建包含光伏、风电、锂电池和双向DC-DC变换器的微电网系统;2)设计并网逆变器的PQ/Vf双模式控制策略;3)实现储能系统与逆变器的协同控制逻辑,包括SOC保护和功率分配;4)通过多种工况仿真验证系统性能。结果表明,该系统能有效维持微电网稳定运行,支持并网/离网无缝切换。文章还探讨了优化方向和应用扩展,为新能源微电网控制提供了实用参考。

xiaoheshang_123的博客 100

NVIDIA Omniverse 技术浅析(二):USD

例如,一个用户可以负责场景的几何体设计,另一个用户可以负责材质和灯光的调整。USD 的开放性和可扩展性,结合 Omniverse 的 Kit 扩展框架,使得用户和开发者可以创建自定义的应用程序和工具,以满足特定的需求。USD 的材质和物理属性系统,结合 Omniverse 的 RTX 实时渲染技术,使得用户可以在虚拟环境中看到逼真的光影效果和物理模拟。USD 的时间轴和动画功能,结合 Omniverse 的物理属性系统,使得用户可以为虚拟环境中的元素创建复杂的动画和物理模拟。

m0_75253143的博客 444

JS 数据类型对象的坑

js开发初期坑

老咸鱼的专栏 1070

如何使用Agent框架来模拟群体智能?

Agent 框架作为人工智能领域的重要工具,可以模拟复杂的群体智能行为,广泛应用于社会科学、经济学和行为学等领域。

335

js中对一个对象数组按照对象某个属性进行排序

javascript中对一个对象数组按照对象某个属性进行排序 我们现在有一组“学生”对象,包含“名字,年龄,分数”等属性,现在要求一个算法,把这些对象放在一个数组里,可以实现按照年龄或者分数对这些对象进行排序。 var sdts = [ {name:"小明",age:12,score:100}, {name:"小红",age:13,score:80}, {name:"小花"...

缘灭_xy的博客 5946

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

js将数组对象中按照对象的某一个属性进行排序

1.对象数组 我们现在有一组对象,包含“name,value”等属性,实现按照value对这些对象进行排序。 series:[ {name:'西安市',value:100}, {name:'威阳市',value:120}, {name:'延安市',value:80}, {name:'南洛市',value:90}, {name:'榆林市',value:130} ] 2.排序方法 实际上在于数组对象的sort方法。 Array.sort(fun) fun是一个函数,排序根据这个

yun的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JS中对象数组按照对象的某个属性进行排序

js中的数组中的对象排序很简单,根据对象的属性指定排序规则即可,如果出问题就仔细检查一下中间数据。

wb_javaScript的博客 2822

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

js 正序、倒序、按字段排序方法

js 基础——sort方法: arrayObject.sort(sortby); 参数:定义排序规则(正序、倒序、按字段排序)的函数; 返回值:对数组的引用。请注意,数组在原数组上进行排序,不生成副本。 无参数时,默认为正序排序(数值数组按数值正序,字符串数组按字符正序)。 要实现不同的排序方式,只需实现sort的输入参数函数即可。 正序排序: //定义正序规则的...

weixin_30768661的博客 1781

JS中对于对象数组按照对象的某个属性进行排序

1.对象数组 我们现在有一组对象,包含“name,value”等属性,实现按照value对这些对象进行排序。 series:[ {name:'西安市',value:100}, {name:'威阳市',value:120}, {name:'延安市',value:80}, {name:'南洛市',value:90}, {name:'榆林市',value:130}] ...

weixin_30326741的博客 684

javascript对数组函数中的某一个或两个字段进行排序

javascript中对一个对象数组按照对象某个属性进行排序 在javascript中,对象和数组是两种不同的类型,这和php中的数组概念不同。在javascript中,也有一些精妙的算法,用来对一些对象进行排序。我在面试迅雷的时候,也拿到一道题,当时做题的时候考虑到时间,没有去仔细研究,回来后再读了一些方法,就知道真正的考点在哪里了。 我们现在有一组“学生”对象,包含“名字,年龄”等属性,现...

licanty的博客 1723

js 数组几种比较大小的方法:正常、根据某个字段,时间

//正常的数组比较大小 var arr = [1,5,7,8,932,78,434]; compareFN(arr) {//比较大小函数 var i = 0; var j = 0; let t; for ( i = 0; i < arr.length; i++){ ...

flting1017的博客 6487

javascript中对一个对象数组按照对象某个属性进行排序

https://www.cnblogs.com/webcabana/p/7460038.html javascript中对一个对象数组按照对象某个属性进行排序 在javascript中,对象和数组是两种不同的类型,这和php中的数组概念不同。在javascript中,也有一些精妙的算法,用来对一些对象进行排序。我在面试迅雷的时候,也拿到一道题,当时做题的时候考虑到时间,没有去仔细研究,回来后再...

MyNameIsXiaoLai的博客 418

排序 根据数组中 某项数值大小排序

{value: 1122, name: ‘紧急报警’},{value: 1122, name: ‘紧急报警’},{value: 209, name: ‘普通报警’},{value: 209, name: ‘普通报警’},{value: 92, name: ‘严重报警’},{value: 92, name: ‘严重报警’},按数值大小排序,数值相同,则按名称首字母排序。

c_qianxia5040的博客 285

php 数组对象某值排序,javascript中对一个对象数组按照对象某个属性进行排序

在javascript中,对象和数组是两种不同的类型,这和php中的数组概念不同。在javascript中,也有一些精妙的算法,用来对一些对象进行排序。我在面试迅雷的时候,也拿到一道题,当时做题的时候考虑到时间,没有去仔细研究,回来后再读了一些方法,就知道真正的考点在哪里了。我们现在有一组“学生”对象,包含“名字,年龄”等属性,现在要求一个算法,把这些对象放在一个数组里,可以实现按照年龄对这些对象...

weixin_39798031的博客 213
上一篇: TypeScript中的命名空间—namespace
下一篇: Js如何遍历嵌套的Object对象
大头爱学习
博客等级 码龄7年 14粉丝 41原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值