第一题:求出两个数组(集合)相同的数。 `
/** 数组: filter配合includes*/
function intersetion(arr1, arr2) {
return arr2.filter(item => arr1.includes(item))
}
/** 集合:*/
function intersetion(set1, set2) {
let setTemp = new Set()
for (let item of set2) {
if (set1.has(item)) {setTemp.add(item)}
}
// 如果你需要放在一个数组的话,可以加下面一行代码
return Array.from(setTemp);
}
`
第二题:找出数组中非零最小值的Index `
/** 如果你需要考虑算法复杂度的话,试试这方法
* 当然此思路,同样可以替换其他语言C,Java */
function getMinIdx(arr) {
let minNum = Number.MAX_VALUE; // 非零最小数, 先初始化js最大数,方便后面索引判断
let minNumIdx = -1; // 非零最小数Index
if (!arr.length) {
return minNumIdx; //空数组的直接返回初始值为负数的Index
}
for(let i = 0; i < arr.length; i++) {
if (arr[i] > 0) { // 剔除所有小于零的数
if (arr[i] < minNum) { // 不断找出小于minNum的数
minNum = arr[i];
minNumIdx = i;
}
}
}
return minNumIdx; // 返回最小数Index
}
/** 如果你想应用一些JS的函数话,下面方法也不错 */
function getMinIdx(arr) {
if(!arr.length) return -1; // 同上理
// 先用filter过滤小于0的数,然后配合Math.min函数找出最小数
const minNum = Math.min(...arr.filter(item => item > 0))
// 再用findIndex函数,对原数组进行索引找出最小值的index
// 值得注意的是:findIndex只会找出最小值的第一次出现的位置,
// 如果数组重复出现最小值,你想找出所有出现最小值的位置,我们得另想它法
return arr.findIndex(el => el === minNum)
}
`
第三题:用多种方法区分一个变量是否为Object还是Array(参考了其他雷同问题的答案)
注意:这里请不要杠Array是一种特殊的对象,在以后题目我们再来探讨这个问题 `
第一种:从原型调toString
// 可以在Object的原型调toString方法,然后call绑定这个变量看是否返回[object Object]
// 还是返回[object Array]
function isArrOrObj(arr) {
console.log(Object.prototype.toString.call(arr))
}
第二种:isArray
// 顾名思义,用Array.isArray来判断是最容易想到的,返回的是一个Boolean类型
// 当然我们只是探讨数组or对象,对其他不必过于追究
funtion _isArray(arr) {
if(Array.isArray(arr) return true;
return false;
}
第三种:instanceof
// instanceof在MDN解释很准确:
// instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
function isArrOrObj(arr) {
if (arr instanceof Array)
console.log("Array")
else if (arr instanceof Object)
console.log("Object");
else // 其他也是同理不举例
console.log("Others")
}
第四-五种:
4:constructor: 思路:(arr constructor Array)
(obj constructor Object)
5: for... in 思路:通过循环遍历这个数的原型方法,在配合用hasOwnProperty来判断
`
第四题:手写Array.prototype.split() //明天更新