<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<title></title>
</head> <body>
</body> </html>
<script>
//数组,冒泡排序,把数组从小到大排序
function bubbleSort(array) {
if(Object.prototype.toString.call(array).slice(8, -1) === 'Array') {
var len = array.length,
temp;
for(var i = 0; i < len - 1; i++) {
for(var j = len - 1; j >= i; j--) {
if(array[j] < array[j - 1]) {
temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
return array;
} else {
return 'array is not an Array!';
}
};
var arr = [23, 34, 3, 4, 23, 44, 333, 444];
console.log(bubbleSort(arr));
//数组,去重
function unique(arr) {
var hash = [];
for(var i = 0; i < arr.length; i++) {
if(hash.indexOf(arr[i]) == -1) {
hash.push(arr[i]);
}
}
return hash;
};
var arr2 = [2, 8, 5, 0, 5, 2, 6, 7, 2];
console.log(unique(arr2));
//数组,数组中出现最多的元素和最多元素的次数,第二多元素和第二多元素的次数
function aryMore(arr) {
var i;
var length = arr.length;
var hash = []; //使用哈希数组
for(i = 0; i < length; i++) {
if(!hash[arr[i]]) hash[arr[i]] = 1; //没有初始化的数组元素为undefined,undefined++为NaN
else hash[arr[i]]++;
}
var max = 0; //最多的次数
var maxV; //出现最多的元素
var second = 0; //第二多的次数
var secondV; //出现第二多的元素
hash.forEach(function(item, index) { //forEach函数会跳过空元素
if(item > max) {
second = max;
secondV = maxV;
max = item;
maxV = index; //用索引来保存原数组的值
} else if(item > second) {
second = item;
secondV = index;
}
});
return {
max,
maxV,
second,
secondV
};
}
var arr3 = [2, 2, 2, 2, 3, 4, 5, 4, 3, 1, 4, 4, 100, 100];
console.log(aryMore(arr3));
//两个数组对比,取出不同的值
function getArrDifference(arr1, arr2) {
return arr1.concat(arr2).filter(function(v, i, arr) {
return arr.indexOf(v) === arr.lastIndexOf(v);
});
};
var arr4 = [0, 1, 2, 3, 4, 5];
var arr6 = [0, 44, 6, 1, 3, 9];
console.log(getArrDifference(arr4, arr6));
//两个数组对比,取出相同的值
function getArrEqual(arr1, arr2) {
let newArr = [];
for(let i = 0; i < arr2.length; i++) {
for(let j = 0; j < arr1.length; j++) {
if(arr1[j] === arr2[i]) {
newArr.push(arr1[j]);
}
}
}
return newArr;
}
var arr7 = [0, 1, 2, 3, 4, 5];
var arr8 = [0, 4, 6, 1, 33, 9];
console.log(getArrEqual(arr7, arr8));
//两个数组,把数组合并,去除相同的值
//合并两个数组,去重
function concatAry(arr1, arr2) {
//不要直接使用var arr = arr1,这样arr只是arr1的一个引用,两者的修改会互相影响
var arr = arr1.concat();
//或者使用slice()复制,var arr = arr1.slice(0)
for(var i = 0; i < arr2.length; i++) {
arr.indexOf(arr2[i]) === -1 ? arr.push(arr2[i]) : 0;
}
return arr;
};
var arr9 = [0, 1, 2, 3, 4, 5];
var arr10 = [0, 4, 6, 1, 3, 9];
console.log(concatAry(arr9, arr10)); //合并多个数组,去重
function concatAryMore(arr1, arr2, arr3) {
if(arguments.length <= 1) {
return false;
}
var concat_ = function(arr1, arr2) {
var arr = arr1.concat();
for(var i = 0; i < arr2.length; i++) {
arr.indexOf(arr2[i]) === -1 ? arr.push(arr2[i]) : 0;
}
return arr;
}
var result = concat_(arr1, arr2);
for(var i = 2; i < arguments.length; i++) {
result = concat_(result, arguments[i]);
}
return result;
};
var arrMore1 = ['a', 'b'];
var arrMore2 = ['a', 'c', 'd'];
var arrMore3 = [1, 'd', undefined, true, null];
console.log(concatAryMore(arrMore1, arrMore2, arrMore3));
</script>

 数组

//数组map使用
//map() 方法会创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果
//例子一
const numbers = [1, 2, 3, 4]
const numbersPlusOne = numbers.map(n => n + 1);
console.log(numbersPlusOne);
//例子二
const allBlogs = [{
title: 'CSS',
tags: ['CSS', 'Web']
}, {
title: 'JavaScript',
tags: ['JavaScript', 'Web', 'ES6']
}]
const allTitles = allBlogs.map(blog => blog.tags)
console.log(allTitles) //数组filter使用
//filter()当你想过滤一个数组时可以使用filter。就像map一样,它接受一个函数作为唯一的参数,该参数在数组的每个元素上调用。这个函数需要返回一个布尔值
//例子一
const numbers2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const oddNumbers = numbers2.filter(n => n % 2 !== 0)
console.log(oddNumbers);
//例子二
const participants = [{
id: 'a3f47',
username: 'john'
}, {
id: 'fek28',
username: 'mary'
}, {
id: 'n3j44',
username: 'sam'
}] function removeParticipant(participants, id) {
return participants.filter(participant => participant.id !== id)
}
console.log(removeParticipant(participants, 'a3f47')) //数组reduce使用
//reduce是数组提供的方法中最难理解的方法,但一旦掌握了该方法,可以做的事情就很多。reduce会取一个数组中的值并将它们合成一个值。它接受两个参数,一个回调函数(reducer函数)和一个可选的初始值(默认情况是数组的第一项)。reducer本身有四个参数:
//累计器:它在reducer中累加返回值
//数组的当前值
//当前索引值
//源数组 var result = [{
subject: 'math',
score: 88
},
{
subject: 'chinese',
score: 95
},
{
subject: 'english',
score: 80
}
];
var dis = {
math: 0.5,
chinese: 0.3,
english: 0.2
}
var sum = result.reduce(function(prev, cur) {
return cur.score + prev;
}, -10);
var qsum = result.reduce(function(prev, cur) {
return cur.score * dis[cur.subject] + prev;
}, -10)
console.log(sum, qsum);

  

数组去重,排序,重复次数,两个数组合并,两个数组去重,map(),filter(),reduce()的更多相关文章

  1. 利用Linux命令行进行文本按行去重并按重复次数排序

    最近杂事太多,正事进展缓慢.Fighting! linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能.本文这里举例说明如何利用Linux命令行进行文本按行去重并按重 ...

  2. 数组的高阶方法map filter reduce的使用

    数组中常用的高阶方法: foreach    map    filter    reduce    some    every 在这些方法中都是对数组中每一个元素进行遍历操作,只有foreach是没有 ...

  3. 数组的常用方法concat,join,slice和splice的区别,map,foreach,reduce

    1.concat()和join() concat()是连对两个或两个数组的方法,直接可以将数组以参数的形式放入 join()是将数组中的所有元素放入一个字符串中,通俗点讲就是可以将数组转换成字符串 2 ...

  4. (转)js在数组中删除重复的元素自保留一个(两种实现思路)

    例如:var student = [‘qiang','ming','tao','li','liang','you','qiang','tao']; 第一种思路是:遍历要删除的数组arr, 把元素分别放 ...

  5. 数组中所有重复次数大于等于minTimes的数字

    class Program { static void Main(string[] args) { int[] input = { 1, 1, 1, 2, 2, 5, 2, 4, 9, 9, 20 } ...

  6. javascript数组详解(js数组深度解析)【forEach(),every(),map(),filter(),reduce()】

    Array 对象是一个复合类型,用于在单个的变量中存储多个值,每个值类型可以不同. 创建数组对象的方法: new Array(); new Array(size); new Array(element ...

  7. 089-PHP数组运用 - 通过循环函数取出部分成员合并成新数组

    <?php function myfunc($arr){ //定义过滤函数 $j=count($arr); for($i=0;$i<$j;$i++){ if($arr[$i]>=0& ...

  8. Js数组的map,filter,reduce,every,some方法

    var arr=[1,2,3,4,5,6]; res = arr.map(function(x){return x*x}) [1, 4, 9, 16, 25, 36] res = arr.filter ...

  9. Java查找数组重复元素,并打印重复元素、重复次数、重复元素位置

    面试题查找重复元素并打印重复次数和重复位置,一顿懵逼,回来死磕写下来,打印指定重复次数和最大次数,其他在此基础上可以再更新 package sort; import org.testng.annota ...

随机推荐

  1. ARM指令集的最新版本包括针对JavaScript的优化

    在ARM指令集中,ARMv8.3添加了一个新的float-to-int指令,其错误和超出范围的值按照JavaScript的方式处理.以前[指令]获取JavaScript的语义要慢得多,JavaScri ...

  2. NOIP2016 D2T2 蚯蚓

    洛谷P2827 其实是一道不是很难的模拟题,暴力好像可以拿80,AC的话要发现其中隐含的单调性 首先是一个小技巧,每次将所有蚯蚓的长度都+q肯定时间复杂度很大,那我们就想,其他所有的蚯蚓加,就相当于取 ...

  3. nyoj 952 : 最大四边形 (计算几何)

    题目链接 任意四边形均可看作是两个三角形拼接得到的(即使是凹四边形),故 可以O(n^2)枚举所有的线段,然后对每条线段O(n)枚举线段端点外的其他点,用来更新以此线段构成的三角形的有向面积的最大值m ...

  4. layui数据表格分页加载动画,自己定义加载动画,"加载中..."

    记录思路,仅供参考 在表格渲染完成后,在done回调函数中给分页动态加点击事件, 关闭"加载中..."动画也是在 done回调函数中关闭 这是我实现的思路,记录给大家参考. , d ...

  5. CSS画心形和蛋形

    一.心形 使用transform-origin属性实现设置不同的点为原点 1.改变元素基点transform-origin(transform-origin是变形原点,原点就是元素绕着旋转或变形的点) ...

  6. iOS开发自定义字体之静态字体

    最后更新 2017-04-25 在iOS开发中经常会用到字体, 一般字体文件比较小的,单一的,几十k, 可以通过内置进去;如果字体文件比较多或者字体文件比较大,通常通过动态加载方式. 静态加载方式 将 ...

  7. 重新理解了重定向,利用重定向可以防止用户重复提交表单(兼谈springmvc重定向操作)

    自己用springmvc框架有一段时间了,但是都还一直分不清楚什么时候应该用转发,什么时候应该用重定向.可能用转发的情形太多了,以致于自己都忘记了还有重定向. 当用户提交post请求之后,刷新页面就会 ...

  8. python -加密(MD5)

    import hashlib def md5_passwd(str,salt ='aaaaa') str = str + salt m = hashlib.md5()#构造一个MD5对象 m.upda ...

  9. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_2_练习_使用递归计算1-n之间的和

    输出6 1到100之间的和 求和的原理

  10. Elastic Search笔记

    目录 1.简介 2.概念和工具使用 2.1 基本概念 2.2 使用kibana 3.操作索引和数据 2.3 索引 2.4 索引映射到文档 2.5 新增数据 2.6 修改数据 2.7 删除数据 4. 搜 ...