1. JS 操作数组有哪些 API?
哪些 API (15种)
操作:
- concat (连接两个数组)
- push (从后面追加一个)
- splice(index,长度,替换的片断)(数组的剪辑)
- pop (从后面删除一个)
- shift (从前面删除一个)
- unshift (从前面追加一个)
- join(‘-’) (将数组元素拼接成一个字符串)
- slice(-1) (截取数组的某一部分, -1 表示截取最后一个)
split('-') 字符串转数组
排序:
- sort (数组排序)
查找:
- indexOf (返回某个指定的字符串值在字符串中首次出现的位置)
- lastIndexOf (返回一个指定的字符串值最后出现的位置)
循环:
- forEach (循环遍历数组)
- map (创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成)
- filter (数组过滤)
- reduce (对数组中的每个元素按序执行一个由您提供的 reducer 函数)
哪些会改变数组本身
- push
- splice 删除元素,并向数组添加新元素
- pop 删除并返回数组的最后一个元素
- shift 删除并返回数组的第一个元素
- unshift 向数组的开头添加一个或更多元素,并返回新的长度
- sort
— map、filter、reduce 的使用 —
// map
/* 语法: Array.map(function(currentValue, index, arr), thisIndex)
* currentValue:必须。当前元素的的值
* index:可选。当前元素的索引
* arr:可选。当前元素属于的数组对象
*/
var array = [1, 2, 3, 4, 5]
var newArray = array.map((item) => {
return item * item
})
console.log(newArray) // [1, 4, 9, 16, 25]
// filter
/* 语法: Array.filter(function(currentValue, indedx, arr), thisValue)
* currentValue:必须。当前元素的的值
* index:可选。当前元素的索引
* arr:可选。当前元素属于的数组对象
*/
var nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var res = nums.filter((num) => {
return num > 5
})
console.log(res) // [6, 7, 8, 9, 10]
// reduce
/* 语法: Arr.reduce(callback,[initialValue])
* callback: 执行数组中每个值的函数,包含四个参数
* 1、previousValue (上一次调用回调返回的值,或者是提供的初始值 initialValue)
* 2、currentValue (数组中当前被处理的元素)
* 3、index (当前元素在数组中的索引)
* 4、array (调用 reduce 的数组)
* initialValue: 作为第一次调用 callback 的第一个参数
* reducer 函数规定必须是一个纯函数
*/
var arr = [1, 2, 3, 4]
var sum = arr.reduce((prev, cur, index, arr) => {
console.log(prev, cur, index, arr)
return prev + cur
})
// 1 2 1 [1, 2, 3, 4]
// 3 3 2 [1, 2, 3, 4]
// 6 4 3 [1, 2, 3, 4]
console.log(arr, sum) // [1, 2, 3, 4] 10
注意: reduce 回调函数中第一个参数就是上次返回的那个结果
2. JS 操作对象有哪些 API?
1.Object.entries()
Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for…in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)
const object1 = { foo: 'bar', baz: 42 };
console.log(Object.entries(object1)[1]);
console.log(Object.entries(object1));
const object2 = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(object2)[2]);
const object3 = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(object3)[0]);
2.Object.keys()
返回键名组成的数组 不返回原型链上的可枚举属性。
const object1 = { foo: 'bar', baz: 42 };
console.log(Object.keys(object1)[1]);
console.log(Object.keys(object1));
const object2 = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(object2)[2]);
const object3 = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.keys(object3)[0]);
3.Object.values()
const object1 = { foo: 'bar', baz: 42 };
console.log(Object.values(object1)[1]);
console.log(Object.values(object1));
const object2 = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.values(object2)[2]);
const object3 = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(object3)[0]);
4.Object.getOwnPropertyNames(obj)
返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。
console.log(Object.getOwnPropertyNames(Array.prototype));
5.obj.hasOwnProperty(prop)
返回一个布尔值,指示对象自身属性中是否具有指定的属性。
const object1 = { foo: 'bar', baz: 42 };
console.log(object1.hasOwnProperty('foo'));
console.log(object1.hasOwnProperty('bar'));
6.Object.freeze()
可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举值、可配置性、可写性。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象。
const object1 = { foo: 'bar', baz: 42 };
object1.foo = 'bar1';
console.log(object1);
const object2 = { foo: 'bar', baz: 42 };
Object.freeze(object2);
object2.foo = 'bar1';
console.log(object2);
3. JS 操作字符串有哪些 API?
- 字符串转换。将任何类型的数据都转换为字符串。
toString()
var num=24;
var mystr=num.toString(); //"24"
String()
var num=24;
var mystr=String(num); //"24"
' '+sting
var num=24;
var mystr="" + num; //"24"
- 字符串分割
slice(start,end)
可提取字符串的某个部分,并以新的字符串返回被提取的部分。str.slice(start,end),截取str从start到end的所有字符(包含起始位置,不包含结束位置,)start和end都可以是负数,如果是负数,就从字符串的尾部开始算起,例如-1就是最后一个字符,-2就是倒数第二个字符,以此类推。如果未指定end参数,则截取从 start 到原字符串结尾的字符串。返回的是字符串。
var str = 'abc&ABC&123';
console.log(str.slice(3));//&ABC&123
console.log(str.slice(3,7));//&ABC
console.log(str.slice(-2));//23
console.log(str.slice(-3,-1));//12
substring(start,end)
用于提取字符串中介于两个指定小标之间的字符,两个参数都必须是非负整数.str.substring(start,end) 截取str从start到end的所有字符(包含起始位置,但不包含结束位置),两个参数都必须是非负整数,如果参数start与end相等,那么该方法返回的就是一个空字符串,如果start比end大,那么该方法在提取字符串之前会先交换这两个参数,如果未指定end参数,则截取从start到原字符串结尾的字符串。
var str = 'abc&ABC&123';
console.log(str.substring(3));//&ABC&123
console.log(str.substring(3,7));//&ABC
substr(start,length)
可在字符串中抽取从start下标开始的指定数目的字符串。(ECMAscript 没有对该方法进行标准化,因此反对使用它。)str.substr(start,length)截取str从start开始的length个字符(包含起始位置)。start参数可以是任意整数,如果是负数,则从str的尾部开始算起,例如-1就是str的最后一个字符。length是可选的,如果没有,则表示截取从str开始的位置到字符串的尾部。
var str = 'abc&ABC&123';
console.log(str.substr(3));//&ABC&123
console.log(str.substr(3,7));//&ABC&12
console.log(str.substr(-2));//23
console.log(str.substr(-5,4));//C&12
注:JavaScript 的字符串是不可变的(immutable),String 类定义的方法都不能改变字符串的内容。所以以上三种方法都不会改变原来的字符串,而是生成新的字符串
- 字符串替换
replace(regexp/substr,replacement)
替换与正则表达式匹配的子串。regexp/substr 必需。规定子字符串或要替换的模式的 RegExp 对象。replacement 必需。一个字符串值。规定了替换文本或生成替换文本的函数。返回 一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。
var str = 'abc&ABC&123';
console.log(str.replace(1,','));//abc&ABC&,23 --srting
console.log(str.replace(/&/g,''));//abcABC123
- 字符串分割成字符串数组
split(separator,howmany)
返回的是字符串数组 separator必需。字符串或正则表达式。howmany可选。该参数可指定返回的数组的最大长度 。返回值,一个字符串数组。
var str = 'abc&ABC&123';
console.log(str.split(1,1));//["abc&ABC&"]
console.log(str.split(/&/g));//["abc", "ABC", "123"]console.log(str.split(''));// ["a", "b", "c", "&", "A", "B", "C", "&", "1", "2", "3"]
- 查找字符串
indexOf(searchvalue,fromindex)
返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1。indexOf() 方法对大小写敏感!searchvalue 必需。规定需检索的字符串值。 fromindex(0~str.len-1) 可选整数。规定在字符串中开始检索的位置。
var str = 'abc&ABC&123';
console.log(str.indexOf(1));//8
console.log(str.indexOf(3,6));//10
console.log(str.indexOf(5,6));//-1
match()
match()
方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。类似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。.match(searchvalue) 必需。规定要检索的字符串值。 .match(regexp) 必需。规定要匹配的模式的 RegExp 对象 ---- 多用这种操作 返回需要的字符串数组
var a = 'abc&CDE&啊啊啊';
var f = a.match(/[A-z]/g);
console.log(f);
["a", "b", "c", "C", "D", "E"]
search()
用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串 search(regexp) 该参数可以是需要在 stringObject 中检索的子串,也可以是需要检索的 RegExp对象。 如果没有找到任何匹配的子串,则返回 -1。
var a = 'abc&CDE&啊啊啊';
a.search('啊');//8
a.search(/[A-z]/g);//0