JavaScript能力测评(牛客)

411 阅读2分钟

JS3 移除数组中的元素(不改原数组)

描述

移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回的数组

示例1

输入:[1, 2, 3, 4, 2], 2

输出:[1, 3, 4]

题解

1. Array.prototype.filter()

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

function remove(arr, item) {
  return arr.filter((x)=> x!==item)
}

2. Array.prototype.push()

push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。

function remove(arr, item) {
  let newarr = [];
  for(let i=0;i<arr.length;i++){
    if (arr[i]!==item) newarr.push(arr[i])
  }
  return newarr
}

JS4 移除数组中的元素(改原数组)

题解

1. Array.prototype.splice()

splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组

function removeWithoutCopy(arr, item) {
  let l = arr.length;
  for(let i=0;i<l;i++){
    let index = arr.indexOf(item)
    if(index !== -1) arr.splice(index,1)
    else return arr
  }
}

注意:修改原数组会导致数组长度变短,所以要把初始长度提前存储在变量中。

JS5 添加元素

题解

1. Array.prototype.concat()

concat()方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

function append(arr, item) {
  return arr.concat(item)
}

2. 展开语法

注意:实际上, 展开语法和 Object.assign() 行为一致, 执行的都是浅拷贝(只遍历一层)。

function append(arr, item) {
  return [...arr, item]
}

注意:concat()在数组末尾添加元素;展开运算符可以在数组任意位置添加元素。 参考:Differences of concat() and spread operator

JS6 删除数组最后一个元素

题解

1. 🙅‍♂️错误示范

function truncate(arr) {
  let newarr = arr.pop();
  return newarr
}

注意:pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。

2. 使用slice()截取数组

slice() 方法返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。

function truncate(arr) {
  return arr.slice(0, -1)
}

JS7 添加元素

描述

在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组

题解

1. 展开运算符

function prepend(arr, item) {
  return [item, ...arr]
}

JS8 删除数组第一个元素

题解

1. slice()

function curtail(arr) {
  return arr.slice(1)
}

JS9 数组合并

题解

1. concat()

function concat(arr1, arr2) {
  return arr1.concat(arr2)
}

JS10 添加元素

题解

1. 用slice()将原数组截成两半,然后用concat()拼接原数组前部,添加的元素和原数组后部

function insert(arr, item, index) {
  return arr.slice(0,index).concat(item,arr.slice(index))
}

2. 将原数组浅拷贝至一个空数组,再用splice()插入要添加的元素

function insert(arr, item, index) {
  let newarr = [...arr]
  newarr.splice(index,0,item)
  return newarr
}
function insert(arr, item, index) {
  let newarr = arr.slice(0)
  newarr.splice(index,0,item)
  return newarr
}

注意:slice()是数组方法,而展开运算符(Spread syntax on the other hand will work for any iterable (object which satisfy iterable protocol) so it will work out of the box on any StringArrayTypedArrayMap and Set. You can also easily create custom iterables) 参考:spread syntax vs slice method