JS 数据处理技巧及小算法汇总( 一)
来源:互联网 发布:恋夜秀场破解版软件 编辑:程序博客网 时间:2024/06/01 16:32
1、根据属性来更新一个数组中的对象
const arr = [ {id: 1, score: 1}, {id: 2, score: 2}, {id: 3, score: 4}];
//更新的值
const newValue = {id: 3, score: 3}
更新数组中id为3的score值。
Es6 装逼写法如下:
const result = initial.map(x => x.id === newValue.id ? newValue : x); //是不是很装B??
console.log(updated) // => [ { id: 1, score: 1 }, { id: 2, score: 2 }, { id: 3, score: 3 } ]
首先数组是利用数组map方法去遍历arr的每一个值,然后进行于newValue的id进行对比,不同返回原来的项,相同返回newValue.
不装逼清晰点写法:
const updated = arr.map(function(item){ return item.id == newValue.id ? newValue : item ;});
console.log(updated) // => [ { id: 1, score: 1 }, { id: 2, score: 2 }, { id: 3, score: 3 } ]
2、数组去重
对于大神来说,我有一百种方法处理这个问题。
方案 A
// 遍历数组,建立新数组,利用indexOf判断是否存在于新数组中,不存在则push到新数组,最后返回新数组 function unique(ar) { var ret = []; for (var i = 0, j = ar.length; i < j; i++) { if (ret.indexOf(ar[i]) === -1) { ret.push(ar[i]); } } return ret;}
方案B
//遍历数组,利用object对象保存数组值,判断数组值是否已经保存在object中,未保存则push到新数组并用object[arrayItem]=1的方式记录保存,这个效率比A高function unique(ar) { var tmp = {}, ret = []; for (var i = 0, j = ar.length; i < j; i++) { if (!tmp[ar[i]]) { tmp[ar[i]] = 1; ret.push(ar[i]); } } return ret;}
方案C
//ES6const numbers = [1, 2, 1, 1, 2, 1, 3, 4, 1 ];const uniq = [...new Set(numbers)] // => [ 1, 2, 3, 4 ];const uniq2 = Array.from(new Set(numbers)) // => [ 1, 2, 3, 4 ];
稍等,我还有方案D
方案D
//filter
function unique (arr) { var res = arr.filter(function (item, index, array) { return array.indexOf(item) === index; //array.indexOf(item) === index 说明这个元素第一次出现,后面这个item再出现他的item肯定不是index了
}) return res; }
欢迎大家留言区给出剩下96种方案。
三、根据属性删除数组中的一个对象
// 根据属性删除数组中的对象,利用filter进行过滤数组中id相同的项 const initial = [ {id: 1, score: 1}, {id: 2, score: 2}, {id: 3, score: 4}]; const removeId = 3; const without3 = initial.filter(x => x.id !== removeId); console.log(without3) // => [ { id: 1, score: 1 }, { id: 2, score: 2 } ]
四、删除一个对象上的属性(key)
//利用es6的 ...运算符将其他属性和a属性分开来,这波操作很亮眼 !
const obj = {a: 1, b: 2, c: 3};const {a, ...newObj} = obj;console.log(newObj) // => {b: 2, c: 3};
五、两个Set对象相减
//利用filter对s1进行过滤 ,去掉s2中存在的数字
const s1 = [ 1, 2, 3, 4, 5 ]; const s2 = [ 2, 4 ]; const subtracted = s1.filter(x => s2.indexOf(x) < 0); console.log(subtracted);//[1,3,5]
同理这样是可以去出一个数组中指定的元素
//去掉s3中的2和4 const s3 = [ 1, 2, 3, 4, 5, 4, 5, 6, 2, 2, 4 ]; const s2 = [ 2, 4 ]; const subtracted1 = s3.filter(x => s2.indexOf(x) < 0);
console.log(subtracted1); // [1, 3, 5, 5, 6]
六、判断一个单词是否是回文
回文是指把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文。例如 12345654321 abcdedbcba 等。
//利用reverse 进行字符串反转,然后和原字符串对比是否相等function isPalindrom(str) { return str == str.split('').reverse().join('');}
七、统计一个字符串出现最多的字母
//统计每个字母出现的次数,然后存起来,然后进行比较
function maxTimesChar(str) { if(str.length == 1) { return str; } let charObj = {}; for(let i=0;i<str.length;i++) { if(!charObj[str.charAt(i)]) { charObj[str.charAt(i)] = 1; }else{ charObj[str.charAt(i)] += 1; } } let maxChar = '', maxValue = 1; for(var k in charObj) { if(charObj[k] >= maxValue) { maxChar = k; maxValue = charObj[k]; } } return maxChar;}
阅读全文
0 0
- JS 数据处理技巧及小算法汇总( 一)
- cocos2d-js:小技巧及注意事项汇总(不定时更新)
- JS 中的小技巧汇总
- 算法设计:小技巧汇总
- js小技巧 (一)
- 小技巧之汇总一
- js中的小技巧(一)
- 开源大数据处理引擎汇总(一)
- 开源大数据处理引擎汇总(一)kosmosfs
- 海量数据处理(转一)--问题及经验技巧
- python 数据处理的小技巧
- python之数据处理小技巧
- Allegro设置及实用小技巧(一)
- js实用工具方法及小技巧
- css,html,js/jQuery开发小技巧汇总-更新中~
- cocos2d-lua:小技巧及注意事项汇总(不定时更新)
- Linux命令使用小技巧(汇总)
- iphone开发小技巧汇总(1)
- Dubbo 生产者配置及启动(一)
- 矩阵中的路径(dfs深搜), 机器人的运动范围(dfs深搜)
- logcat概括性介绍
- 原码, 反码, 补码 详解
- Java的反射机制
- JS 数据处理技巧及小算法汇总( 一)
- 23中设计模式分类
- TSV_TNEW_PAGE_ALLOC_FAILED
- 大数据课程笔记3:Kolmogorov Complexity
- C#设计模式之五建造者模式(Builder)【创建型】
- 在REDIS当中LIST如何使用分析
- AOP 的利器:ASM 3.0 介绍
- nova的shelve的log
- OGG 补充日志 文档 ID 965876.1