目录
- 通过
filter去除Array中的undefinednull空字符串 filter的实现- 返回数组中
符合指定规则的第一个元素 - 倒序打印链表的值
- 找出下列正数组的最大差值
一 通过 filter 去除Array中的 undefined null 空字符串
filter()方法会创建一个新数组,原数组的每个元素传入回调函数中,回调函数中有return返回值,若返回值为true,这个元素保存到新数组中;若返回值为false,则该元素不保存到新数组中;原数组不发生改变`
使用场景,过滤接口返回的数据
var arr1 = ['A', '', 'B', null, undefined, 'C', ' ',""];
function removeInvalid(arr){
return arr.filter(function (item) {
return item && item.trim();
});
}
removeInvalid(arr1)
// ['A', 'B', 'C']
二 filter 的实现
1) filter 的使用
filter用于对数组进行过滤。 它创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
Array.filter(function(currentValue, indedx, arr), thisValue)
thisValue 指定 this 的作用域对象
1) filter 的实现
基于 for + if + call 实现
Array.prototype.filter1 = function filter1(fn, context) {
if (typeof fn !== "function") {
throw new TypeError(`${fn} is not a function`);
}
let arr = this;
let temp = [];
for (let i = 0; i < arr.length; i++) {
let result = fn.call(context, arr[i], i, arr);
if (result) temp.push(arr[i]);
}
return temp;
};
var arr =[1,2,1,6,2,3];
var arr1 = arr.filter1((item, index, self) => self.indexOf(item) === index)
console.log(arr1);
// [1, 2, 6, 3]
三 返回数组中符合指定规则的第一个元素
入参
一个数组,一个函数, 返回符合指定规则的第一个元素
如:
find([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; }) 应该返回 8。
find([1, 3, 5, 9], function(num) { return num % 2 === 0; }) 应该返回undefined。
实现
function find(arr,fn){
let newArr = arr.filter(fn);
console.log(newArr);
return newArr[0];// filter 返回一个新的符合条件的数组, 取其第一个元素即可.如果 filter 返回为空数组,则取不到返回 undefined
}
var arr1 = [1, 3, 5, 8, 9, 10];
var fn = (item) => item % 2 ===0;
find(arr1,fn);// 8
四 倒序打印链表的值
题目说明: 不能使用临时变量 var temp = x;
递归在
调用自身之后打印即是倒序,在调用自身之前打印就是正序
var node = {
val:1,
next:{
val:2,
next:{
val:3,
next:{
val:4
}
}
}
}
function reverseFun(node){
if(!node){
return
}else{
console.log('before:',node.val)
reverseFun(node.next)
console.log('after:',node.val)
}
}
reverseFun(node);
// before: 1
// before: 2
// before: 3
// before: 4
// after: 4
// after: 3
// after: 2
// after: 1
五 找出下列正数组的最大差值
比如: 输入 [10,5,11,7,8,9] 输出 6
这是通过一道题目去测试对于基本的数组的最大值的查找,很明显我们知道,最大差值肯定是一个数组中最大值与最小值的差
var arr1 = [16,5,1,7,22,9]
function getMaxDifferenceValue(arr) {
const item1 = Math.max.apply( null, arr );
const item2 = Math.min.apply( null, arr );
return item1 - item2;
}
console.log(getMaxDifferenceValue(arr1)); // 21
ES6实现
var arr1 = [16,5,3,7,22,9]
function getMaxDifferenceValue(arr) {
const item1 = Math.max(...arr);
const item2 = Math.min(...arr);
return item1 - item2;
}
console.log(getMaxDifferenceValue(arr1)); // 19
总结
filter:arr---过滤筛选-->arr不改变原始数组, 返回一个符合条件的新数组.map:arr---加工处理-->arr不改变原始数组, 返回一个新数组.