Javascript 常见的操作数组的方法

操作数组常用方法

  • 总结使人进步,所以经常总结是一个很好的习惯,今天给大家总结了一些关于Js中对于数组的操作,我们写JS的时候遇到的最多的就是数组的操作,数组也是Js里面相对比较麻烦的一个点,希望这篇文章可以帮助到各位大佬!
reduce

首先说的是这个操作数据计算的方法,reduce
语法:

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,343678]
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

升序例子:

-直接用法
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 感谢博主的分享)

降序例子:

var array = [1, 80, 4, 33, 21, 55]
array.sort(function (x, y) {
    return y - x
});
console.info(array)
数组查值

实际业务中很多情况是需要我们判断这个数组中有没有我们想要的值,下面记录一些方法:

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

数组查询满足条件的值
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)
//将前面的提示去掉就是数组本身的格式,数组连接字符串以后会丢失格式
移除数组的某一个值
Array.prototype.remove = function(val) {
    var index = this.indexOf(val);
    if (index > -1) {
        this.splice(index, 1);
    }
}

用法

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的过程中,经常遇到的一些问题,这里总结一下,以后遇到了可以直接拿来使用,喜欢的可以关注一下,鄙人不才,能力有限,写的不对的还请及时联系我,我这边及时纠正,也可以相互交流。谢谢各位大佬!

  • 15
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是悟能了

阅读就是对我最大的支持,感谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值