共计 1866 个字符,预计需要花费 5 分钟才能阅读完成。
13、过滤数组中的假值
从数组中移除所有的假值(false values)
JavaScript 中的假值有 false、null、0、””、undefined、NaN。
提醒:能够思考将每个值都转换为布尔值(boolean)。
输出:bouncer([7, “ate”, “”, false, 9])
输入:[7, “ate”, 9]
解法一:
function bouncer(arr) {let temp = [];
for(let i =0;i<arr.length;i++) {if(Boolean(arr[i])=== true) {temp.push(arr[i]);
}
}
return temp;
}
思路:
很简略,新建一个长期数组,遍历数组里的每一项,判断其布尔值是否为 true,而后将 true 项放入长期数组里。
知识点:判断一个变量的布尔值是否为 true:Boolean(变量); 往数组里增加元素,push()
解法二:
function bouncer(arr) {let newArray = [];
for (let i = 0; i < arr.length; i++) {if (arr[i]) newArray.push(arr[i]);
}
return newArray;
}
思路:和解法一一模一样,不过是没用 Boolean 办法判断
解法三:
function bouncer(arr) {return arr.filter(Boolean);
}
思路:用了 js 的过滤办法:failter
14、找出元素在排序后数组中的索引
数组(第一个参数)在排序后,将一个值(第二个参数)插入该数组,并使数组放弃有序。返回这个新插入元素的最小索引值。返回值应为一个数字。
例如,getIndexToIns([1,2,3,4], 1.5) 应该返回 1 因为 1.5 大于 1(索引为 0)且小于 2(索引为 1)。
同样地,getIndexToIns([20,3,5], 19) 应该返回 2。因为数组排序后会变成 [3,5,20],而 19 小于 20(索引为 2)且大于 5(索引为 1)。
解法:
function getIndexToIns(arr, num) {arr.sort((a, b) => a - b);
for (let i = 0; i < arr.length; i++) {if (arr[i] >= num)
return i;
}
return arr.length;
}
思路:
用 js 的 sort 办法,把数组排序,而后遍历数组,若元素大于 num,则返回其下标。
15、比拟字符串
如果数组里的第一个字符串蕴含了第二个字符串中的所有字母,则返回 true。
例如,[“hello”, “Hello”] 应该返回 true。因为在疏忽大小写的状况下,第一个字符串蕴含了第二个字符串里呈现的所有字母。
[“hello”, “hey”] 应该返回 false。因为 hello 并不蕴含字符 y。
最初,[“Alien”, “line”] 应该返回 true。因为 line 中的所有字母都呈现在了 Alien 中。
解法:
function mutation(arr) {let test = arr[1].toLowerCase();
let target = arr[0].toLowerCase();
for (let i = 0; i < test.length; i++) {if (target.indexOf(test[i]) < 0) return false;
}
return true;
}
思路:
因为题目要求疏忽大小写,所以要先转为小写放到新的数组里,遍历 test 数组,如果 target 数组里不蕴含字母就返回 false,否则全副蕴含的话就返回 true。这里的 indeOf 也能够写成
target.indexOf(test[i]) == -1
知识点:①转小写:toLowerCase()
② 数组里是否蕴含某值,indexOf,蕴含则返回其下标,不蕴含则返回 -1
16、宰割数组
请编写一个函数,该函数将一个数组(第一个参数)拆分成若干长度为 size(第二个参数)的子数组,并将它们作为二维数组返回。
输出:chunkArrayInGroups([“a”, “b”, “c”, “d”], 2)
输入:[[“a”, “b”], [“c”, “d”]]
解法:
function chunkArrayInGroups(arr, size) {let newArr = [];
for (let i = 0; i < arr.length; i += size) {newArr.push(arr.slice(i, i + size));
}
return newArr;
}
思路:
新建一个数组用于存储宰割的数组元素,遍历原数组,用 slice 办法宰割,每宰割一次就把这些值放到新数组里。