面试题:JavaScript 操作数组元素的方法有哪些?

这是一个非常基础但重要的 JavaScript 面试题,考察对数组操作的掌握程度。JavaScript 提供了丰富的数组方法,可以分为 增删改查、遍历、转换、排序、查找、合并 等几大类。


✅ 一、添加元素(增)

方法作用是否改变原数组
push(...items)在数组末尾添加一个或多个元素,返回新长度✅ 改变
unshift(...items)在数组开头添加一个或多个元素,返回新长度✅ 改变
concat(...arrays)合并数组,返回新数组❌ 不改变
const arr = [1, 2];
arr.push(3);        // [1, 2, 3]
arr.unshift(0);     // [0, 1, 2, 3]
arr.concat([4, 5]); // [0, 1, 2, 3, 4, 5](原数组不变)

✅ 二、删除元素(删)

方法作用是否改变原数组
pop()删除并返回最后一个元素✅ 改变
shift()删除并返回第一个元素✅ 改变
splice(start, deleteCount, ...items)从指定位置删除(或替换)元素✅ 改变
slice(start, end)截取子数组,返回新数组❌ 不改变
filter(callback)过滤元素,返回满足条件的新数组❌ 不改变
const arr = [1, 2, 3, 4];

arr.pop();           // 4,arr 变为 [1,2,3]
arr.shift();         // 1,arr 变为 [2,3]
arr.splice(1, 1);    // 删除索引1的元素,返回 [2,4]
arr.slice(0, 2);     // [2,3](不改变原数组)
arr.filter(x => x > 2); // [3,4]

✅ 三、修改/替换元素(改)

方法作用是否改变原数组
splice(start, deleteCount, ...items)在指定位置插入或替换元素✅ 改变
fill(value, start, end)用指定值填充数组✅ 改变
copyWithin(target, start, end)在数组内部复制一段到另一位置✅ 改变
const arr = [1, 2, 3];
arr.splice(1, 1, 'a'); // [1, 'a', 3]
arr.fill(0, 1, 3);     // [1, 0, 0]

✅ 四、查找元素(查)

方法返回值是否改变原数组
indexOf(item, fromIndex)第一个匹配元素的索引,无则 -1
lastIndexOf(item)最后一个匹配元素的索引
includes(item)是否包含该元素(布尔值)
find(callback)返回第一个满足条件的元素
findIndex(callback)返回第一个满足条件的元素索引
some(callback)是否至少有一个元素满足条件
every(callback)是否所有元素都满足条件
const arr = [10, 20, 30];

arr.indexOf(20);     // 1
arr.includes(25);    // false
arr.find(x => x > 15);     // 20
arr.findIndex(x => x > 25); // 2
arr.some(x => x > 25);      // true
arr.every(x => x > 5);      // true

✅ 五、遍历与转换

方法作用是否改变原数组
forEach(callback)遍历数组,无返回值
map(callback)映射新数组,返回新数组
reduce(callback, init)累计计算,返回最终值
reduceRight()从右往左累计
[1, 2, 3].forEach(x => console.log(x));
[1, 2, 3].map(x => x * 2);     // [2, 4, 6]
[1, 2, 3].reduce((sum, x) => sum + x, 0); // 6

✅ 六、排序与反转

方法作用是否改变原数组
sort(compareFn)排序(默认字符串排序)✅ 改变
reverse()反转数组✅ 改变
[3, 1, 2].sort();        // [1, 2, 3]
[1, 2, 3].reverse();     // [3, 2, 1]

✅ 七、合并与连接

方法作用是否改变原数组
concat(...arrays)合并数组
join(separator)将数组转为字符串
toString()转为字符串
[1, 2].concat([3, 4]); // [1,2,3,4]
[1, 2, 3].join('-');   // "1-2-3"

✅ 八、其他实用方法

方法说明
Array.from(iterable)从类数组或可迭代对象创建新数组
Array.of(...items)创建数组(比 new Array() 更安全)
flat(depth)扁平化嵌套数组
flatMap(callback)map + flat
Array.from('hi');        // ['h', 'i']
[1, [2, 3]].flat();      // [1, 2, 3]
[1, 2].flatMap(x => [x, x * 2]); // [1,2, 2,4]

✅ 总结(面试回答模板)

JavaScript 操作数组的方法非常丰富,主要分为:

  • pushunshiftconcatsplice
  • popshiftspliceslicefilter
  • splicefill
  • indexOfincludesfindfindIndex
  • 遍历forEachmapreduce
  • 排序sortreverse
  • 合并concatjoin

大部分方法如 mapfilterslice纯函数,不改变原数组;而 pushpopsplicesort 等会修改原数组,使用时需注意。

掌握这些方法及其是否改变原数组,是写出健壮代码的关键。

THE END
喜欢就支持一下吧
点赞14 分享