数组对象常用处理方案(算法思路)
(1)依据数组对象中某个值,将相同的对象合并成一个新对象
数据源是这样的
beforeData: [{ name: "tony", id: "1", age: "20" },{ name: "jack", id: "2", age: "21" },{ name: "tony", id: "3", age: "50" },{ name: "jack", id: "4", age: "10" },{ name: "mark", id: "5", age: "22" },{ name: "mark", id: "6", age: "40" }]
要将数据中name相同的项合并成一个对象
afterData: [{name: "tony",origin: [{ name: "tony", id: "1", age: "20" },{ name: "tony", id: "3", age: "50" }]},{name: "jack",origin: [{ name: "jack", id: "2", age: "21" },{ name: "jack", id: "4", age: "10" }]},{name: "mark",origin: [{ name: "mark", id: "5", age: "22" },{ name: "mark", id: "6", age: "40" }]}]
实现:
let tempArr = [];for (let i = 0; i < this.beforeData.length; i++) {if (tempArr.indexOf(this.beforeData[i].name) === -1) {this.afterData.push({name: this.beforeData[i].name,origin: [this.beforeData[i]]});tempArr.push(this.beforeData[i].name);} else {for (let j = 0; j < this.afterData.length; j++) {if (this.afterData[j].name == this.beforeData[i].name) {this.afterData[j].origin.push(this.beforeData[i]);break;}}}}
(2)根据数组中对象的某一个属性值进行排序
如下代码,根据数组对象中的age进行排序
方式一:
var arr = [{name:'zopp',age:0},{name:'gpp',age:18},{name:'yjj',age:8}
];function compare(property){return function(a,b){var value1 = a[property];var value2 = b[property];return value1 - value2;}
}
console.log(arr.sort(compare('age')))
方式二:
students:[{name:'baibai',age:32},{name:'xiaobai',age:30},{name:'gufan',age:21},{name:'King',age:45}
]//数组对象方法排序:
function sortByKey(array, key) {return array.sort(function(a, b) {var x = a[key];var y = b[key];return ((x < y) ? -1 : ((x > y) ? 1 : 0));})
}//将相应的数组对象传入即可完成排序:
sortByKey(students,age);
(3)数组的值大小排序
如下代码,将数组中的值进行大小排序
let values = [1,2,3,6,4,8];
//小到大排序,如果需要由大到小,把返回的-1和1反过来就可以了
let compare = (x,y) => {if(x < y){return -1}else if(x > y){return 1;}else{return 0;}
}
console.log(values.sort(compare)); //[1, 2, 3, 4, 6, 8]
(4)数组中相同元素组合成一个新的数组
现在有一个这样规律的数组,需求是把里面相同元素组合成一个新的数组;
arr=['1','1','1','2',,'3','4','5','5','6','6','7','8','9','9','10']
结果是这样的
newArr = [ [ "1" , "1" , "1" ] , [ "2" ] , [] , [ "3" ] , [ "4" ] , [ "5" , "5" ] , [ "6" , "6" ] , [ "7" ] , [ "8" ] , [ "9" , "9" ] , [ "10" ] ]
实现方式:
var arr=['1','1','1','2',,'3','4','5','5','6','6','7', '8','9','9','10'];var newArr = [],tempArr = [];for(var i=0,j=arr.length;i<j;i++){if(arr[i] == arr[i+1]){tempArr.push(arr[i]);} else {tempArr.push(arr[i]);newArr.push(tempArr.slice(0));tempArr.length = 0;}}console.log(newArr);/*[ [ "1" , "1" , "1" ] , [ "2" ] , [] , [ "3" ] , [ "4" ] ,[ "5" , "5" ] , [ "6" , "6" ] , [ "7" ] , [ "8" ] , [ "9" , "9" ] , [ "10" ] ]*/
数组对象常用处理方案(算法思路)相关推荐
- 常用的排序算法思路及代码
原文地址:那些年,让我面试头大的几个排序算法,今天终于搞懂了! 最近带广告的博客总是被封,于是copy一下备份,如有侵权,还请告知,必定删除! 快速排序 介绍: 快速排序(Quicksort)是对冒泡 ...
- 算法总结---最常用的五大算法(算法题思路)
算法总结---最常用的五大算法(算法题思路) 一.总结 一句话总结: [明确所求:dijkstra是求点到点的距离,辅助数组就是源点到目标点的数组] [最简实例分析:比如思考dijkstra:假设先只 ...
- C++(8)--数组及常用算法
数组及常用算法 1.数组基本概念 2.一维数组 2.1数组的定义 2.2数组初始化 2.3一维数组动态赋初值 2.4一维数组应用实例 2.5一维数组的排序算法 2.6 一维数组元素的删除和插入 arr ...
- javascript数组——新建数组、访问数组、遍历数组的方法、数组对象的方法、冒泡排序算法、json的正反序列化
目录 数组 通过构造函数的三种方法 字面量创建数组方式 访问数组 遍历数组的方法 遍历:遍历就是把数组中的元素从头到尾都访问一次 操作数组对象的方法 删除和添加 delete与Vue.delete区别 ...
- JavaScript 常用内置对象(字符串属性、Math对象、Array数组对象)
1.字符串属性 <script> var test_var = "I Iove you"; console.log(test_var.charAt(3)) //char ...
- JavaScript学习(六十六)—字符串对象常用的属性和方法总结以及数组元素的排序问题
JavaScript学习(六十六)-字符串对象常用的属性和方法总结以及数组元素的排序问题 学习内容 一.数组去重问题 二.二维数组的定义 三.二维数组的元素操作 四.二维数组的遍历 五.关联数组 六. ...
- JavaScript基础(四)对象、数组、对象与数组的常用API
目录 一.对象 1. 对象的创建 2. 对象属性的访问 3. 遍历对象属性 4. 检测属性是否存在 5. 对象的方法 二.数组对象 1. 数组的创建 2. 访问数组 3. 数组长度 4. 数组的遍历 ...
- 简单java数组程序_java(数组及常用简单算法 )
数组 数组:数组是存储同一种数据类型数据的集合容器. 数组的定义格式: 数据类型[] 变量名 = new 数据类型[长度]; 数组的好处:对分配到数组对象中每一个数据都分配一个编号(索引值.角 ...
- 第 14 章 程序员常用 10 种算法
第 14 章 程序员常用 10 种算法 1.二分查找算法 1.1.二分查找算法介绍 前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方式 二分查找法只适用于从有序的数列中 ...
最新文章
- 软件定义网络 对我们有多重要?
- spring boot(八)RabbitMQ使用
- Ubuntu 20.04 LTS安装搜狗输入法,只需三条命令,还能自动更新
- css的基本操作学习--css样式,选择器,hover,文字属性,文本属性,背景
- Service Worker 的一个实战例子
- Permutation Partitions CodeForces - 1326C(组合数学+思维)
- tensorflow基本教程
- 算法随笔一(背包问题)
- linux的trace文件路径,linux系统分析工具之Blktrace(十)
- 干货:通过双十一等项目实战看架构技术
- 豆瓣、唱吧、爱回收等106款应用被工信部下架
- bzoj5056:OI游戏
- python3.6安装pyspider
- web环境下的图像打印组件
- SVN下载项目到本地
- 关于昆仑通态通道处理设置
- swoole php配置文件,EasySwoole分离配置文件
- android 代码设置默认浏览器打开,android手机如何设置默认浏览器?
- 9大代理服务器软件的比较与分析之校园局域网代理蝴蝶
- eval函数介绍与用法