Map,filter总结

it2022-05-05  118

arr.map(function callback(currentValue[,index[,array]]){ }); 其中,index,array不是必须参数。 currentValue : 当前数组中被处理的元素 index: 当前被处理元素索引 array: var numbers = [1, 4, 9]; var roots = numbers.map(Math.sqrt); // roots is now [1, 2, 3] // numbers is still [1, 4, 9]

map不会改变原始数组;

map不会对空数组检测;

map 程序1:

构造一个函数,实现如下功能: toWeirdCase( "Weird string case" );=> returns "WeIrD StRiNg CaSe" function toWeirdCase(str){ return str.replace(/\w{1,2}/g,function(ele){ ele[0].toUpperCase()+slice(1); }); } 解析:str.match(/\w{1,2}/g) => ["We", "ir", "d", "st", "ri", "ng", "ca", "se"]; tips:为什么 不能用如下代码? callback 函数中 ele[0].toUpperCase()+ele[1]?? ele[1]有可能为undefined 而slice(1)在找不到的情况下返回“”

map程序2:

//利用了map callback的第二个参数:function toWeirdCase(str){ return str.split(' ').map(function(ele){ return ele.split('').map(function(el,index){ return index%2 == 0 ? el.toUpperCase() : el.toLowerCase(); }).join(''); }).join(' '); }

 filter:

//把一个数组中的0转移到数组尾部,其余元素顺序不变。 var moveZero = function(arr){ return arr.filter(function(x){return x !== 0}).concat(    arr.filter(    function(x){      return x === 0;    }    )) }

给一个整数数组,把奇数从小到大排序,偶数位置不动。

function sortArr(arr){ var oddArr = arr.filter(function(x){ return x%2; }).sort(function(a,b){ if(a<b){ return b; } }); return arr.map(function(x){ x%2 ? odd.shift() : x; //arr.shift()删除并返回第一个元素 }) }

 分析(())))是否配对

) => false

( => false

() => true

function validParentheses(parens){ //TODO var brr = parens.split('').map(function(x){ return x == '(' ? 1 : -1; }); if(brr[0] == -1){ return false; } var sum = 0; for(var i=0;i<brr.length;i++){ sum = sum + brr.shift(); i--; if(sum < 0){ return false; } } if(sum > 0){ return false; } return true; }

  改进版:(看了别人的代码感觉自己智商捉急了==)

function validParentheses(parens){ var n = 0; for (var i = 0; i < parens.length; i++) { if (parens[i] == '(') n++; if (parens[i] == ')') n--; if (n < 0) return false; } return n == 0; }

 返回数组中和word相同(含有同样数量的字母)的元素

function anagrams(word, words) { var temp = word.split('').sort().join(''); return words.filter(function(x){ return x.split('').sort().join('') == temp; }); }anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) => ['aabb', 'bbaa']anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) => ['carer', 'racer']anagrams('laser', ['lazing', 'lazy', 'lacer']) => []

改进版(想法一样,聪明的我O(∩_∩)O):

String.prototype.sort = function() { return this.split("").sort().join(""); }; function anagrams(word, words) { return words.filter(function(x) { return x.sort() === word.sort(); }); }

小算法:大于等于5的,反转

spinWords( "Hey fellow warriors" ) => returns "Hey wollef sroirraw" spinWords( "This is a test") => returns "This is a test" spinWords( "This is another test" )=> returns "This is rehtona test"

function spinWords(str){ var temp = ''; return str.split(' ').map(function(x){ return temp+x.length >= 5 ? x.split('').reverse().join('') : x; }).join(' '); }注意:reverse();是数组的方法

正则版本:

function spinWords(str){ return str.replace(/\w{5,}/g,function(w){ return w.split('').reverse().join(''); }); } spinWords( "Hey fellow warriors"); "Hey wollef sroirraw"

判断({[}])是否匹配 

function fn(str){ while((/\(\)|\{\}|\[\]/g).test(str)){ str = str.replace(/\(\)|\{\}|\[\]/g,""); } return !str.length; }正则很强大了,夸!

 

转载于:https://www.cnblogs.com/liuxinxin4288/p/9042447.html


最新回复(0)