JS牛客算法总结(8.18-8.24)

目录

数组去重

利用set+Array.from/扩展运算符 

利用IndexOf

for循环

filter+indexOf

includes

利用对象特性

字符串转数组

Array.from方法

split方法

扩展运算符

Object.assign([], string)

数组转字符串

sort---按照字典排序

字符串的charAt方法  String.fromCharCode和charCodeAt

str.charAt(index)方法:

str.charCodeAt(index)方法:

String.fromCharCode(num1, ..., numN),num1, ..., numN:一组序列数字,表示 Unicode 值。

for...in  和for...of区别

标准不同

在数组、对象、Map、Set中使用的不同

typeOf

基本类型

引用类型


数组去重

利用set+Array.from/扩展运算符 

let arr = [1, 2, 1, 3, 5, 4, 5, 4, 7, 8, 9];
// 利用set+Array.from/扩展运算符
console.log(Array.from(new Set(arr))); //[1, 2, 3, 5,4, 7, 8, 9]
console.log([...new Set(arr)]);//[1, 2, 3, 5,4, 7, 8, 9]

Array.from和扩展运算符将set集合转换为数组

利用IndexOf

//利用IndexOf
// 方法一:
let arr = [1, 2, 1, 3, 5, 4, 5, 4, 7, 8, 9];
let newArr = [];
arr.forEach((value) => {
    // 当新数组中没有value值时,返回-1,此时可以加入新数组
  if (newArr.indexOf(value) == -1) {
    newArr.push(value);
  }
});
console.log(newArr);//[1, 2, 3, 5,4, 7, 8, 9]
//方法二
let newArr = [];
arr.forEach((value, index) => {
    // indexOf会返回字符第一次出现的位置  当一次出现的位置!=索引值时,即说明前面有相同的字符,此时就可以不用加入
  if (arr.indexOf(value) == index) {
    newArr.push(value);
  }
});
console.log(newArr); //[1, 2, 3, 5,4, 7, 8, 9]

for循环

//for循环(双重for循环/[for循环+sort]+splice方法)
let arr = [1, 2, 1, 3, 5, 4, 5, 4, 7, 8, 9];
// 方法一:(双层for循环+splice)
for (let i = 0; i < arr.length; i++) {
  for (let j = i + 1; j < arr.length; j++) {
    if (arr[i] == arr[j]) {
      arr.splice(j, 1);
    }
  }
}
console.log(arr); //[1, 2, 3, 5,4, 7, 8, 9]
// 方法二:(单层for循环+sor排序+splice)
arr.sort((a, b) => {
  return a - b;
});
for (let i = 0; i < arr.length; i++) {
  if (arr[i] == arr[i + 1]) {
    arr.splice(i, 1);
  }
}
console.log(arr); //[1, 2, 3, 5,4, 7, 8, 9]

filter+indexOf

//fiter不会改变原数组
let arr = [1, 2, 1, 3, 5, 4, 5, 4, 7, 8, 9];
let newArr = arr.filter((value, index) => {
  return arr.indexOf(value) === index;
});
console.log(newArr); //[1, 2, 3, 5,4, 7, 8, 9]

includes

// includes
let arr = [1, 2, 1, 3, 5, 4, 5, 4, 7, 8, 9];
let newArr = [];
arr.forEach((value) => {
  if (!newArr.includes(value)) {
    newArr.push(value);
  }
});
console.log(newArr); //[1, 2, 3, 5,4, 7, 8, 9]

利用对象特性

// 利用对象特性:key唯一
let arr = [1, 2, 1, 3, 5, 4, 5, 4, 7, 8, 9];
let obj = {};
let newArr = [];
arr.forEach((value) => {
  if (!obj[value]) {
    obj[value] = 1;
    newArr.push(value);
  }
});
console.log(newArr);//[1, 2, 3, 5,4, 7, 8, 9]

字符串转数组

Array.from方法

let str = "gnz48-ck";
console.log(Array.from(str)); //['g', 'n', 'z','4', '8', '-','c', 'k']

Array.from()方法用于将类数组结构或者有一个length属性和可索引元素的结构转换为数组实例

split方法

let str = "gnz48-ck";
console.log(str.split("")); //['g', 'n', 'z','4', '8', '-','c', 'k']

扩展运算符

let str = "gnz48-ck";
console.log([...str]); //['g', 'n', 'z','4', '8', '-','c', 'k']

Object.assign([], string)

let str = "gnz48-ck";
console.log(Object.assign([], str)); //['g', 'n', 'z','4', '8', '-','c', 'k']

数组转字符串

var arr = [1,2,3];  //定义数组
var str = arr.join("-");  //指定分隔符-
console.log(s);  //返回字符串“1-2-3”

sort---按照字典排序

默认情况下,sort会按照升序重新排列数组元素,为此,sort()会在每一项上调用String()转型函数,然后比较字符串来决定顺序。即使数组的元素都是数值,也会把数组转换为字符串再比较、排序。

let arr = [0, 1, 5, 10, 15];
console.log(arr.sort());//[ 0, 1, 10, 15, 5 ]

调用sort会按照这些数值的字符串形式重新排序,因此即使5小于10,但字符串中‘10’在字符串‘5’前面,所以10还是排在5前面。为此,sort方法可以接受一个比较函数,用于判断那哪个值应该在前面。

比较函数:

比较函数接受两个参数,如果第一个参数应该排在第二个参数前面,就返回负值,如果两个参数相等,就返回0.如果第一个参数应该在第二个参数的后面,就返回正值。

// 比较函数例子
function compare(value1,value2){
    if(value1<value2){
        return -1
    }else if(value1>value2){
        return 1
    }else{
        return 0
    }
}

字符串的charAt方法  String.fromCharCode和charCodeAt

str.charAt(index)方法:

方法返回的是str中索引为index的字符。

let str = "gnz48";
console.log(str.charAt(2));//z

str.charCodeAt(index)方法:

返回的是相应字符的编码

let str = "gnz48";
console.log(str.charCodeAt(2)); //122

String.fromCharCode(num1, ..., numN),num1, ..., numN:一组序列数字,表示 Unicode 值。

console.log(String.fromCharCode(65, 66, 67)); //ABC

for...in  和for...of区别

标准不同

for...in是ES5的标准,该方法是对对象的属性名进行遍历,因为数组也是一个对象,所以数组中的索引在for...in中被视为属性名称

for...of是ES6的标准,该方法遍历的是对象的属性所对应的值。

在数组、对象、Map、Set中使用的不同

  1. 数组:for...in为索引,for...of为数组值。
  2. 对象:   for...in为属性值,for...of不能遍历基本对象。
  3. Map:for...in无法遍历Map,for...of遍历map时,key为一个带有键名和键值的数组。所以即可以遍历键名,也可以遍历键值。
  4. Set:    for...in无法遍历Set,  for...of遍历set为值
let arr = ["a", "b", "b", "b"];
let obj = {
  name: "whh",
  age: "18",
  weight: "45",
};
let map = new Map();
map.set("snh48", "赵粤");
map.set("gnz48", "陈珂");
map.set("bej48", "段艺璇");
let set = new Set(["h", "e", "l", "o"]);
// 数组
for (key of arr) {
  console.log(key); //a b b b
}
for (key in arr) {
  console.log(key); //0 1 2 3
}
// 对象
for (key of obj) {
  console.log(key); //for...of不可以枚举基本对象
}
for (key in obj) {
  console.log(key); //name age weight
}
//Map
//在map中可以用for...of既可以取得键值也可以取得键名
console.log(map); //{ 'snh48' => '赵粤', 'gnz48' => '陈珂', 'bej48' => '段艺璇' }
for (key of map) {
  //console.log(key); //[ 'snh48', '赵粤' ][ 'gnz48', '陈珂' ][ 'bej48', '段艺璇' ]
  console.log(key[0] + ":" + key[1]); //snh48:赵粤 gnz48:陈珂 bej48:段艺璇
}
for (key in map) {
  console.log(key); //for...in循环不能用于遍历Map
}
Set;
for (key of set) {
  console.log(key); //h e l o
}
for (key in set) {
  console.log(key); //for...in循环不能用于遍历Map
}

typeOf

基本类型

基本类型: number string null undefined  Boolean symbol

基本类型中除了null为Object 其余都为基本类型字符串

// 基本类型 number string null undefined  Boolean symbol
// 基本类型中除了null为Object 其余都为基本类型字符串
console.log(typeof 3); //number
console.log(typeof "123"); //string
console.log(typeof true); //boolean
console.log(typeof undefined); //undefined
console.log(typeof null); //object
const a = Symbol("a");
console.log(typeof a); //symbol

引用类型

引用类型:  数组 方法 Map Set 正则 Date

引用类型中除了function其余都为Object

let arr = [1, 2, 3];
console.log(typeof arr); //object
let fun = function () {};
console.log(typeof fun); //function
let date = new Date();
console.log(typeof date); //object
let reg = new RegExp();
console.log(typeof reg); //object
let map = new Map();
console.log(typeof map); //object
let set = new Set();
console.log(typeof set); //object

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值