FreeCodeCamp-JavaScript初级算法题-3

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

思路:
很简单,新建一个临时数组,遍历数组里的每一项,判断其布尔值是否为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方法分割,每分割一次就把这些值放到新数组里 。

你可能感兴趣的:(javascript算法)