数组的方法总结

本文深入讲解JavaScript中的数组方法map()和filter(),包括其语法、参数及返回值,通过实例演示如何利用这些方法进行数组元素的转换和筛选,是前端开发者必备的知识点。
Array.prototype.map()

map()方法创建一个新数组,该数组的元素是原数组中的每个元素调用map()方法中传入的函数的执行结果

var arr = [1,3,3,5];
arr.map(x => 2*x);
//[2,6,6,10]
复制代码

语法

var new_array = arr.map(function callback(currentValue[,index[,array]]){
    //Return element for new_array
}[,thisArg])
复制代码

参数:

callback: 生成新数组元素的函数,使用三个参数,currentValue、index、array

currentValue:callback函数正在处理的当前元素

index:(可选)callback函数正在处理的当前元素的索引

array:(可选)map方法中被调用的数组

thisArg:(可选)执行callback函数时使用的this值

返回值:一个新数组,每个元素都是回调函数的结果

var arr = [1,8,{name:'Jay',age:32}];
var ar = arr.map(item => item);   //实现数组的拷贝(浅拷贝)
//[1,8,{name:'Jay',age:32}];
arr[2]===ar[2];
//true 
arr[2].name='Jay Chou';
ar;
//[1,8,{name:'Jay Chou',age:32}]
复制代码
var kvArray = [
    {key:1,value:10},{key:2,value:20},{key:3,value:30}
];
var reformattedArray = kvArray.map(item =>{
	var rObj = {};
	rObj[item.key] = item.value;
	return rObj;
});
reformattedArray;
//[{1:10},{2:20},{3:30}];
复制代码
function copy(item){
    return item
}
var arr = [1,'o','k'];
arr.map(copy);
//[1, "o", "k"]
copy.length;
//1
复制代码
Array.prototype.filter()

filter()方法创建一个新数组,新数组的元素满足filter()的函数参数执行的结果

var arr = ['aere','jklil','jrett','sdfsf'];
const result = arr.filter(item => item.length>4);
result;
//["jklil", "jrett", "sdfsf"]
复制代码

语法

var newArray = arr.filter(callback(element[,index[,array]])[,thisArg])

参数

callback 用来设置filter的规则,返回true表示满足规则,保留该元素,放到新的数组中,返回false表示不满足规则,不保留该元素

element:数组中当前正在处理的元素

index:(可选)正在处理的元素在数组中的索引

array:(可选)调用了filter的数组本身

thisArg:(可选)执行callback时,用于this的值

返回值:一个新的、由通过测试的元素组成的数组,如果所有元素都没有通过测试,则返回空数组 ``

var arr = [{ id: 12 }, { id: 'ok' }, 
{ id: 123 }, { id: '' }, { id: 'undefined' }, { id: null },
{ id: NaN }, { id: undefined }, { id: true }, {}, { id: 0 }];
function isNumber(item) {
    return item !== undefined && typeof (item) === 'number' && !isNaN(item);
}
var feifa = 0;
function filterById(item) {
    if (isNumber(item.id) && item.id !== 0) {
        return true;
    }
    feifa++;
    return false;

}
arr.length;
//11
var arrById = arr.filter(filterById);
arrById;
//[{id: 12},{id: 123}]
feifa;
//9
复制代码

搜索功能实现

var fruits = ['apple','banana','grapes','mango','orange'];
function filterItems(query){
	return fruits.filter(function(item){
		return item.toLowerCase().indexOf(query.toLowerCase()) > -1;
	})
}
filterItems('AN');
// ["banana", "mango", "orange"]
filterItems('a');
// ["apple", "banana", "grapes", "mango", "orange"]
复制代码

转载于:https://juejin.im/post/5cc001d86fb9a032136fcc7e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值