JavaScript中一个对象数组按照另一个数组排序

JavaScript中一个对象数组按照另一个数组排序

需求:排序

  1. const arr1 = [33, 11, 55, 22, 66];
  2. const arr2 = [{age: 55}, {age: 22}, {age: 11}, {age: 66}, {age: 33}]
  3. 数组arr2中每项都是一个对象,对象中age属性 === 数组arr1中的项
  4. 将arr2数组根据对象的age值在arr1中的位置排序, 排序后的结果为 `const arr2 = [ {age: 33},{age: 11}, {age: 55}, {age: 22}, {age: 66}]
    1553188-20190515231847877-520051743.png

步骤:

  • 方法1(需求已知根据对象的age排序)

     const arr1 = [33, 11, 55, 22, 66]; const arr2 = [{age: 55}, {age: 22}, {age: 11}, {age: 66}, {age: 33}]console.log('排序前arr2 => ', arr2) // 排序 arr2arr2.sort((prev, next) => {const p = arr1.indexOf(prev.age)const n = arr1.indexOf(next.age)return p - n})// 排序 arr2(简写)arr2.sort((prev, next) => {return arr1.indexOf(prev.age) - arr1.indexOf(next.age)})console.log('排序后arr2 => ', arr2)console.log('     arr1 => ', arr1)

    1553188-20190515232939505-1348981822.png

  • 方法2 (需求未知需要根据对象的哪个属性排序)

      const ageArr = [33, 11, 55, 22, 66]; const moneyArr = [5000, 3000, 6000, 2000, 9000]const objArr = [{age: 55, money: 6000},{age: 22, money: 3000},{age: 11, money: 2000},{age: 66, money: 9000},{age: 33, money: 5000}]// 1. 将sort排序函数抽离出来/*** @description 数组sort方法的 sortby(规定排序顺序)* @param {String} propName 属性名(数组排序基于的属性)* @param {Array} referArr 参照数组(objArr数组排序的参照数组)*/const sortFunc = (propName, referArr) => {return (prev, next) => {return referArr.indexOf(prev[propName]) - referArr.indexOf(next[propName])}}// 2. 排序objArrobjArr.sort(sortFunc('age', ageArr))console.log('按age属性排序后的objArr\n', objArr)objArr.sort(sortFunc('money', moneyArr))console.log('按money属性排序后的objArr\n', objArr)

转载于:https://www.cnblogs.com/guojbing/p/10872867.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle mysql 常用语句(查询表中某字段有几种类型,及每种类型有多少个数、插入多行、查询前几行)

亲测有效 1、(1)查询表中某字段有几种类型,及每种类型有多少个数 select DISTINCT name user_name,count(*) num from patient GROUP BY name (2)查询表中某字段类型共有几种 select count(distinct name) from pat…

SQL中多表查询:左连接、右连接、内连接、全连接、交叉连接

一、左连接,右连接,内连接关系 左连接:左表全部两个表交集(①②) 右连接:右表全部两个表交集(③②) 内连接:两个表交集(②) 二、结合具体例子看…

ORA-00972: identifier is too long问题解决

报错 解决: 查看你写的是否有中文 如果有中文,看是否有引号将中文引起来,用引号引起来后不报错

Alter操作(修改列名,修改列数据类型,增加列,删除列,增加列且设为主键及对默认值操作)

一、mysql (增加列,删除列,修改列;增加,删除,修改列的默认值) 增加列,删除列,修改列 1、修改列的数据类型 alter table patient modify column mood int2、修改列名 …

马蜂窝推荐系统容灾缓存服务的设计与实现

数据库突然断开连接、第三方接口迟迟不返回结果、高峰期网络发生抖动...... 当程序突发异常时,我们的应用可以告诉调用方或者用户「对不起,服务器出了点问题」;或者找到更好的方式,达到提升用户体验的目的。 一、背景 用户在马蜂窝…

Vivado Bit文件压缩

前言 Vivado编译生成的Bit文件太大,想要小一点该咋办呢?那么就需要给bit文件瘦身。 流程 直接在约束文件xdc中添加下述语句即可: set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] 未压缩前 压缩后 根据工程不同,还…

Mac安装webpack报错gyp ERR! configure error gyp ERR! stack Error: `gyp` failed with exit code: 1解决

安装webpack ,报错提示 gyp ERR! configure error gyp ERR! stack Error: gyp failed with exit code: 1 gyp ERR! stack at ChildProcess.onCpExit (/usr/local/lib/node_modules/cnpm/node_modules/node-gyp/lib/configure.js:345:16) gyp ERR! stack a…

箭头函数用法

1.基本使用 2.参数和返回值 函数里只有一行代码 log没有返回值,所以是undefined 结果为 Hello Demo undefined 箭头函数: 在函数作为另外一个函数参数的时候,适合用箭头函数 3.箭头函数的this 返回值都是window 返回值,一…

云计算值得学习吗?云计算开发技术与应用未来工作前景

云计算技术的工作前景本人非常看好,其实已经不是我自己看好的事了,而是现在本来就已经很好很火了,在云计算的基础上又存生出大量其他产业链,归根结底还是云计算是前有技术的综合体,一会儿总结,那么工作前景…

路由的导航守卫

全局导航守卫 打印一下to,看是啥 meta 元数据(描述数据的数据) 3、路由独享的守卫 保留状态 keep-alive 保持组件不要频繁进行创建和销毁 activated deactivated 只有被保存了状态,使用了keep-alive时才起作用 和正则…

promise基础学习记录

sync 同步 async 异步 链式调用 有reject情况,直接进行到catch

Vuex状态管理方式

backend 前端 frontend 后端 getters mutations参数,有参数的情况,称为负载payload 参数不是一个的话,传对象的形式 提交,一个是通过commit,另外一个是type 这种情况下,count是一个对象&#xf…

MySQL(二)

MySQL连接管理 mysql 命令 -u 用户名-p 密码 例子: mysql -uroot -poldboy123 -h ip mysql -uroot -poldboy123 -hlocalhost -P3306 例子:mysql -uroot -poldboy123 -h 10.0.0.52 -P 3308 例子:mysql -uroot -poldboy123 -h 10.0.0.52 -P 330…

axios网络模块封装

网络测试 httpbin.org 发送普通的请求 get请求可以直接拼到URL后面 也可以将参数放到params对象中 axios发送并发请求 spread可以把值展开 数组的解构 对象的解构 axios配置信息相关 原始信息 defaults全局配置 使用全局的axios和对应的配置在进行网络请求 常见的…

Ubuntu 重置MySQL密码

1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下: vim /etc/my.cnf 在文档内搜索mysqld定位到[mysqld]文本段: /mysqld (在vim编辑状态下直接输入该命令可搜索文本内容)在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密…

sendMessage 与 obtainMessage (sendToTarget)比较

我们平时在做到多线程问题的时候可能利用Handler去传递Message,其中,经常使用的就是1、new Handler().obtainMessage().sendToTarget();2、new Handler().sendMessage(new Message());第一种是直接传递what,obj等,msg的一些数据&a…

如何在报表中实现算法的可挂接需求

在报表项目中,有些报表中部分数据的计算方法会经常改变。例如:某企业员工的实际工资是通过绩效得分计算出的,而绩效的算法可能经常变动,需要在不改动其他代码的情况下用新算法替换旧算法。一般我们都会想到用 Java 来实现计算&…

【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化

字符串匹配算法是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目,本文主要介绍BF算法(最好想到的算法,也最好实现)和KMP算法(最经典的) 一、BF算法 BF算法,即暴力(Bru…

JMeter【第五篇】关联:5种方法

前几天在Q群里看到群友发的最近10年性能测试工具使用率的统计,最近的2018年,jmeterloadrunner占了93%的使用率,说明这两个是主流,其中,jmeter的使用率逐年提升,现在已经超过了loadrunner,占了51…

树——通用树到二叉树的转换

1,已经创建了通用树结构,有必要创建另一种树结构吗? 2,简化树就直接减少结点中孩子的数量,但是这样树还能通用吗? 3,通用树结构的回顾: 1,双亲孩子表示法: 1&…