js面接問題解析(一)
23683 ワード
1.callとapplyの違い.
伝達するパラメータが配列である必要がある場合、applyの使用はより便利である.一方、callを使用する場合は、配列を展開し、配列の各項目を個別に入力する必要があります.
入力するパラメータが3つより大きい場合、callの性能はapplyよりやや優れている.
fn.call(obj,1,2,3)
fn.apply(obj,arr),fn.call(obj,...arr)
2.文字列の大文字と小文字を逆にします.
let str=「asdfasFDGLASDこんにちは、世界」
str = str.replace(/[a-zA-Z]/g,content => {
return content.toUpperCase() === content ? content.toLowerCase() :content.toUpperCase();
}
3.手書きindexOf方法
function myIndexOf(T) {
let lenT = T.length,
lenS = this.length,
res = -1;
for (let i = 0; i <= lenS - lenT) {
if (this.substring(i, lenT) == T) {
res = i;
break;
)
)
return res;
)
String.prototype.myIndexOf = myIndexOf;
let S = "asdjlkasfrqwoi",
T = "rqw";
正規完了効果を使用:/rqw/.exec(「asdjlkasfrqwoi」)
function myIndexOf(T) {
let reg = new RegExp(T),
res = reg.exec(this);
return res === null ? -1 : res;
)
4.配列を扁平化し、重量を除去し、昇順で重複しない配列を得る.
(1)まずes 6が提供する方法を用いて問題を解決する.
let arr = [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
// es6 Array,prototype.flat ( )
arr = arr.flat(Infinity);
// new set
arr = new Set(arr);
// sort
arr = Array.from(arr.sort((a,b) => a-b))
(2)配列を文字列に変換し,中括弧を直接除去し,配列に戻して並べ替えを行う.let arr = [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
//
arr = arr.toString()
//
arr = arr.split(',')
// map
arr = arr.map(item => {
return Number(item);
});
// new set
arr = new Set(arr);
// sort
arr = Array.from(arr.sort((a,b) => a-b))
(3)some法を用いて展開演算子と組み合わせて配列を平坦化する.let arr = [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
// some arr , true arr
while (arr.some(item => Array.isArray(item))){
arr = [].concat(arr)
}
// new set
arr = new Set(arr);
// sort
arr = Array.from(arr.sort((a,b) => a-b))
(4)再帰的手法を用いて配列を扁平化する.let arr = [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
~ function () {
function myFlat() {
let res = [],
_this = this;
let fn = (arr) => {
for(let i = 0; i < arr.length; i++){
let item = arr[i];
if (Array.isArray(item)){
fn(item);
continue;
}
res.push(item)
}
}
fn(_this);
return res
}
Array.prototype.myFlat = myFlat
}()
arr = arr.myFlat()