Which are in?
Description:
Given two arrays of strings a1
and a2
return a sorted array r
in lexicographical order of the strings of a1
which are substrings of strings of a2
.
Example 1:
a1 = ["arp", "live", "strong"]
a2 = ["lively", "alive", "harp", "sharp", "armstrong"]
returns ["arp", "live", "strong"]
Example 2:
a1 = ["tarp", "mice", "bull"]
a2 = ["lively", "alive", "harp", "sharp", "armstrong"]
returns [];
solution:
1:
function inArray(arr1, arr2) {
return arr1.filter(function(needle) {
return arr2.some(function(haystack) {
return haystack.indexOf(needle) > -1;
});
}).sort();
}
解题:操作数组的几种用法 ,fliter这个函数会传入一个回调函数 ,对数组里的每个元素执行一遍 ,然后返回一个新的数组 ;
具体用法:
[1,2,3,4,5].filter(function(item,index){
return item>2;
});
常用的函数包括
[1,2,3,4,5].map(function(item,index){
return item>2;
});
会对数据里的每个元素,执行一遍函数 ,然后返回执行结果 ,比如这个例子就是返回 flase ,flase,true,true,true
[1,2,3,4,5].some(function(item,index){
return item >5;
});
会对数组里的每个元素,执行一遍函数 ,直到此函数返回 true;
如果回调函数对每个元素执行后都返回 false ,some 将返回 false。它只对数组中的非空元素执行指定的函数,没有赋值或者已经删除的元素将被忽略。
[1,2,3,4,5].some(function(item,index){
return item >5;
});
对数组中的每个元素都执行一次指定的函数(callback),直到此函数返回 false,如果发现这个元素,every 将返回 false,如果回调函数对每个元素执行后都返回 true ,every 将返回 true。它只对数组中的非空元素执行指定的函数,没有赋值或者已经删除的元素将被忽略;
[1,2,3,4,5].forEach(function(item,index){
return item >5;
});
没啥好说的;
2
function inArray(array1,array2){
return array1
.filter(a1 => array2.find(a2 => a2.match(a1)))
.sort()
}
解题:
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
该方法类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
=>
是es6语法中的arrow function
举例: var add= (a,b)=>a+b;
就相当于:
function add(a,b){
return a+b;
}
3.其他解法都差不多的意思
function inArray(a1, a2) {
var str = a2.join(' ');
return a1.filter(s => str.indexOf(s) !== -1).sort();
}
同2
function inArray(array1,array2){
var array3 = [];
array1.forEach(word=>array2.forEach(e => e.includes(word) ? array3.push(word) : 0));
return array3.sort().filter((e,i,a) => e !== a[i+1]);
}
function inArray(array1,array2){
return array1.filter(function(value){return (array2.join('-').indexOf(value))!=-1}).sort();
}