面试题

Array常用API及样例

2024-07-21  本文已影响0人  你这个锤子

push(): 将一个或多个元素添加到数组的末尾,并返回新的长度。
pop(): 删除并返回数组的最后一个元素。改变原数组

let array = [1, 2, 3, 4, 5];  
let lastElement = array.pop();  
console.log(lastElement); // 输出: 5  
console.log(array); // 输出: [1, 2, 3, 4]

shift(): 删除并返回数组的第一个元素,改变原数组。

let array = [1, 2, 3, 4, 5];  
let lastElement = array.shift();  
console.log(lastElement); // 输出: 1
console.log(array); // 输出: [ 2, 3, 4, 5]

unshift(): 将一个或多个元素添加到数组的开头,并返回新的长度。

const a = [1,2,3,4]
a.unshift(5)
console.log(a) // [5, 1, 2, 3, 4]

join('') 把数组内数据取出,把数组中的元素拼接成字符串

let txt=[ 'b','o','o','n','u','R' ];
let veb = txt.join('');
console.log(veb)   // 'boonuR'

concat(): 用于将一个数组或值合并至一个数组中,该方法不会改变原数组

var arr = [1, 2, 3, 4, 5];
var newArr = arr.concat(6);
console.log(newArr); // [1, 2, 3, 4, 5, 6];

: 展开语法...: 可以在数组构造时, 将数组表达式在语法层面展开

var arr = [1, 2, 3, 4, 5];
arr = [...arr, 6];
console.log(arr); // [1, 2, 3, 4, 5, 6];

length: 属性,可以在数组末尾后面添加一个元素

var arr = [1, 2, 3, 4, 5];
arr[length] = 6;
console.log(arr); // [1, 2, 3, 4, 5, 6];

slice(): 用于从数组中提取一段元素,并返回一个新的数组。这个方法不会改变原始数组,包含从 start 到 end(不包括 end)选择的数组元素。可以用于字符串

let arr = [0, 1, 2, 3, 4, 5];  
let a = arr.slice(2, 4);  // 从索引2开始,到索引4之前,但不包括索引4的元素。结果是 [2, 3]  
let b = arr.slice(2);  // 从索引2开始,到数组末尾。结果是 [2, 3, 4, 5]
let c = arr.slice();  // 或 arr.slice(0)   输出 [0, 1, 2, 3, 4, 5]
或者
let str = "Hello, world!";  
let extractedStr = str.slice(7, 12); // 提取从索引 7 到索引 12 的字符  
console.log(extractedStr); // 输出: "world"

splice(): 用于添加/删除数组中的元素。这个方法会直接修改原数组。

let arr = [0, 1, 2, 3, 4, 5];  
let a = arr.splice(2, 2);  // 从索引2开始,删除2个元素。结果是 [2, 3]  
console.log(arr);  // 输出 [0, 1, 4, 5]  
let b = arr.splice(2, 0, 'new1', 'new2');  //在索引2的位置插入'new1'和'new2'。b 结果是 []
console.log(arr); // 输出 [0, 1, 'new1', 'new2', 2, 3, 4, 5]
let c = arr.splice(2);  // 从索引2开始,删除所有元素。c 结果是 [2, 3, 4, 5]  
console.log(arr); // 输出 [0, 1]

sort(): 用于对数组的元素进行排序。这个方法会直接修改原数组。

// 普通用法:升序排序数组
let arr = [5, 2, 3, 1, 4];  
arr.sort();  // console.log(arr);   输出 [1, 2, 3, 4, 5]
// 自定义排序函数:
let arr = [5, 2, 3, 1, 4];  
arr.sort((a, b) => a - b);  // 使用自定义的比较函数,按照数字的大小进行升序排序;b - a
// 按照字母顺序对字符串数组进行排序。
let arr = ['cat', 'dog', 'elephant', 'ant'];  
arr.sort();  // 使用默认的排序方式,结果是 ['ant', 'cat', 'dog', 'elephant'],因为'ant'在字母表中的位置比'cat'更靠前  
arr.sort((a, b) => a.localeCompare(b));  // 使用自定义的比较函数,按照字母顺序进行排序,结果是 ['ant', 'cat', 'dog', 'elephant'],这是正确的字母顺序排序结果

reverse(): 用于反转数组的元素顺序,即第一个元素变成最后一个,最后一个变成第一个。这个方法会直接修改原数组。

let numbers = [1, 2, 3, 4, 5];  
// 使用 slice() 方法复制数组,然后对复制的数组使用 reverse()  
let reversedNumbers = numbers.slice().reverse();  // 这里的slice() 方法被用来创建一个 numbers 数组的浅拷贝
console.log(numbers); // 输出: [1, 2, 3, 4, 5],原数组未变  
console.log(reversedNumbers); // 输出: [5, 4, 3, 2, 1],复制的数组已反转

forEach(): 对数组中的每个元素执行一次给定的函数。支持三个参数,数组中的当前项item,当前项的索引index,原始数组array;理论上这个方式是没有返回值的,只是遍历数组中的每一项,不对原来数组进行修改,但是可以自己通过数组的索引来修改原来的数组;

var forEachArray = [10,34,57,43,76];  
var res = forEachArray.forEach((item,index,array) => { array[index] = item*10; }) 
console.log(res);//--> undefined;  
console.log(forEachArray);//--> [100,340,570,430,760] 通过数组索引改变了原数组;

map(): 创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后的结果。支持三个参数,value数组中的当前项,index当前项的索引,array原始数组;理论上这个方式是没有返回值的,只是遍历数组中的每一项,不对原来数组进行修改,但是可以自己通过数组的索引来修改原来的数组;

var mapArray = [10,34,57,43,76];  
var res = mapArray.map((item,index,input) => {  
       return item*10;
}) 
console.log(res);//--> [100,340,570,430,760] ;  
console.log(mapArray);//--> [10,34,57,43,76] 通过数组索引改变了原数组;

filter(): 用于创建一个新数组,其包含通过提供的函数实现的测试的所有元素。

let numbers = [1, 2, 3, 4, 5];  
let evenNumbers = numbers.filter(function(num) {  
  return num % 2 === 0;  
}); 
console.log(evenNumbers);  // 输出 [2, 4]
或者
let numbers = ['145', '75', '475', '175'];  
let evenNumbers = numbers.filter((num) => { 
  return num.indexOf('7') != -1;  
}); 
console.log(evenNumbers);  // ['75', '475', '175']

some(): 用于检测数组中是否有至少一个元素满足提供的测试函数。

let numbers = [1, 2, 3, 4, 5];  
let hasEven = numbers.some(function(num) {  
  return num % 2 === 0;  
});  
console.log(hasEven);  // 输出 true,因为数组中存在偶数

reduce(): 对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值;函数本身接受两个参数:accumulator(累加器)和currentValue(当前值)

const numbers = [1, 2, 3, 4];  
// 使用 reduce 计算总和; 累加器的初始值,这里是0
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);  
console.log(sum); // 输出: 10
// 数组对象累加
const items = [{value: 1}, {value: 2}, {value: 3}, {value: 4}];  
const totalValue = items.reduce((acc, item) => acc + item.value, 0);  
console.log(totalValue); // 输出: 10

every(): 测试数组的所有元素是否都通过由提供的函数实现的测试。

const numbers = [1, 2, 3, 4];  
// 使用 every 检查所有数是否都大于0  
const allPositive = numbers.every(number => number > 0);  
console.log(allPositive); // 输出: true
// 检查数组对象属性
const users = [{isActive: true}, {isActive: false}, {isActive: true}];  
const allActive = users.every(user => user.isActive);  
console.log(allActive); // 输出: false

includes(): 判断一个数组是否包含一个指定的值,返回 true 或 false。也可以用在字符串上

let numbers = [1, 2, 3, 4, 5];  
console.log(numbers.includes(3));  // 输出 true,因为数组中存在数字3  
console.log(numbers.includes(-3));  // 输出 false,因为数组中不存在数字-3
或者
let str = "Hello, world!";  
console.log(str.includes("world")); // 输出: true  
console.log(str.includes("world", 7)); // 输出: true,因为从索引7开始,"world" 是在字符串中的。

find(): 用于搜索和定位数据。它的功能是根据指定的条件或标准,在数据集中查找特定的元素或子集。

大多数情况下,find() 用于数组(列表)中查找特定元素
const array = [{ a: 1, b: 2 },{ a: 2, b: 2 },{ a: 3, b: 5 }];  
const found = array.find(ele => ele.a > 2);  // 结果是 { a: 3, b: 5 }
console.log(found.b) // 5

用于对象查找
const obj = {a: 1, b: 2, c: 3};  
const found = Object.keys(obj).find(key => obj[key] > 2);  // 结果是 "c"
 // console.log(Object.keys(obj)) //  ['a', 'b', 'c']

注意点:
1,返回第一个满足条件的元素:一旦找到满足条件的元素,find() 就会停止搜索并返回该元素。
如果没有找到任何元素,则返回 undefined 或 null
2,接受回调函数作为参数:为了确定查找的准则,find() 通常接受一个回调函数作为参数。这个回调函数决定了如何评估每个元素是否满足查找条件。
3,性能考虑:find() 是一个线性搜索算法,最坏情况下的时间复杂度是 O(n)。如果需要更高效的搜索(例如二分查找),应考虑使用其他方法或数据结构。
4,其他用途,例如数据库查询、文件系统搜索等。

findIndex(): 返回数组中满足提供的测试函数的第一个元素的索引。否则返回 -1。

let people = [ { name: 'Alice', age: 20 }, { name: 'Bob', age: 17 }, { name: 'David', age: 15 } ];  
// 使用 findIndex 方法查找年龄大于 18 的第一个人的索引  
let index = people.findIndex(function(person) {  
  return person.age > 18;  
});  
// 更简洁,可以使用箭头函数  
let indexArrow = people.findIndex(person => person.age > 18); 
console.log(index); // 输出: 0  注意:输出 0 是因为 Alice 是第一个年龄大于 18 的人
// 假设我们要找到名字以 "C" 开头的第一个人的索引
let indexForNameStartingWithC = people.findIndex(person => person.name.startsWith('C'));  
console.log(indexForNameStartingWithC); // 输出: 2 因为 Charlie 是名字以 "C" 开头的第一个人,他的索引是 2

includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
arr.includes(searchElement, fromIndex)
searchElement,必须。需要查找的元素值。
fromIndex,可选。从该索引处开始查找 searchElement。如果为负值,则按升序从 array.length + fromIndex 的索引开始搜索。默认为 0。

[1, 2, 3].includes(2);     // true
[1, 2, 3].includes(4);     // false
[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true
上一篇下一篇

猜你喜欢

热点阅读