操作数组常用方法
- 总结使人进步,所以经常总结是一个很好的习惯,今天给大家总结了一些关于Js中对于数组的操作,我们写JS的时候遇到的最多的就是数组的操作,数组也是Js里面相对比较麻烦的一个点,希望这篇文章可以帮助到各位大佬!
reduce
首先说的是这个操作数据计算的方法,reduce 语法:
代码语言:javascript复制arr.reduce(function(prev,cur,index,arr){
...
}, init)
- 去重例子:
var newArr = arr.reduce(function (prev, cur) { prev.indexOf(cur) === -1 && prev.push(cur); return prev;},[])
- 求和例子:
var arr = [4,2,3,1,7,8,3,4,3,6,7,8]
var sum = arr.reduce(function (prev, cur) { return prev cur;},0)
这个0也就是我们开始计算的第一位初始值,也就是prev的初始值
- 求最大值例子:
var max = arr.reduce(function (prev, cur) { return Math.max(prev,cur)})
解释: arr 表示原数组; prev 表示上一次调用回调时的返回值,或者初始值 init; cur 表示当前正在处理的数组元素; index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1; init 表示初始值
数组排序 sort
升序例子:
代码语言:javascript复制-直接用法
var arr = [2,5,3,1,4,-6,3,5,6,-2,-5]
console.info(arr.sort())
- 可以函数式写法
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b
})
console.log(numbers)
- 可以ascii字符排
var items = ['résé', 'premier', 'cliché', 'communiqué', 'café', 'adieu']
items.sort(function (a, b) {
return a.localeCompare(b)
})
console.info(items)
- 可以对象进行排序
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic' },
{ name: 'Zeros', value: 37 }
];
// sort by value
items.sort(function (a, b) {
return (a.value - b.value)
})
console.info(items)
- 还有一种我也在看的方法
// 需要被排序的数组
var list = ['Delta', 'alpha', 'CHARLIE', 'bravo']
// 对需要排序的数字和位置的临时存储
var mapped = list.map(function(el, i) {
return { index: i, value: el.toLowerCase() }
})
// 按照多个值排序数组
mapped.sort(function(a, b) {
return (a.value > b.value) || (a.value === b.value) - 1
})
// 根据索引得到排序的结果
var result = mapped.map(function(el){
return list[el.index]
})
console.info(result)
(该例子涞源:https://www.cnblogs.com/cmy1996/p/9194534.html 感谢博主的分享)
降序例子:
代码语言:javascript复制var array = [1, 80, 4, 33, 21, 55]
array.sort(function (x, y) {
return y - x
});
console.info(array)
数组查值
代码语言:javascript复制实际业务中很多情况是需要我们判断这个数组中有没有我们想要的值,下面记录一些方法:
let arr = ['something', 'anything', 'nothing', 'anything’]
let index = arr.indexOf('nothing');console.log(index)
//结果是2
或者
function include_test(fruit) {
const redFruits = ['apple', 'strawberry', 'cherry', 'cranberries'];
if (redFruits.includes(fruit)) {
console.log(redFruits.includes(fruit));
} else {
console.log(redFruits.includes(fruit));
}
}
include_test('apple’)
//返回 true 否则返回false
如果不存在该值则返回-1
数组查询满足条件的值
代码语言:javascript复制let numbers = [12, 5, 8, 130, 44]
let maxnum = []
let minnum = []
let result = numbers.find(item => {
return item > 8
})
let resultmap = numbers.map((item)=>{
console.info(item)
if(item > 8){
return maxnum.push(item)
}else{
return minnum.push(item)
}
})
console.log('第一个满足条件的是数字' result)
console.info('所有满足条件的是数字' maxnum)
console.info('所有不满足条件的是数字' minnum)
//将前面的提示去掉就是数组本身的格式,数组连接字符串以后会丢失格式
移除数组的某一个值
代码语言:javascript复制Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
}
用法
代码语言:javascript复制let arr = [2,5,4,5,6,7,3,4,2,5,8,1,9,0,3,6,7,5]
let succesarr = []
/**
* 构造一个移除元素的函数
* @param val
*/
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
/**
* 将满足条件的值拿到
* @type {any[]}
*/
let result = arr.map((item,index=0)=>{
if(arr[index 1] - arr[index] === 1){
return succesarr.push(item,arr[index 1])
}
})
/**
* 将最终的数据拿到
* @type {any[]}
*/
let finresult = succesarr.map((item,index=0)=>{
if(succesarr[index 1] === succesarr[index]){
return succesarr.remove(succesarr[index])
}
})
console.info(succesarr)
这些是我们写js的过程中,经常遇到的一些问题,这里总结一下,以后遇到了可以直接拿来使用,喜欢的可以关注一下,鄙人不才,能力有限,写的不对的还请及时联系我,我这边及时纠正,也可以相互交流。谢谢各位大佬!