乐趣区

关于javascript:FreeCodeCampJavaScript初级算法题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<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 办法宰割,每宰割一次就把这些值放到新数组里。

退出移动版