【study】 js-每日一题

56 阅读1分钟
  1. 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例 1:
输入: [2,2,1]
输出: 1


示例 2:
输入: [4,1,2,1,2]
输出: 4


function test(arr) {
    const list = arr.reduce((prev, next) => {
      if (prev[next]) {
        prev[next]++
      } else {
        prev[next] = 1
      }
      return prev
    }, {})

    for (let key in list) {
      if (list[key] === 1) {
        return key; // 返回只出现一次的元素
      }
    }
  }

  console.log(test([2, 2, 2, 1, 1, 6]))

  1. 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数
function test(arr, k = 0) {

  if (k === 0) return arr;

  // const arr1 = arr.splice(k + 1, arr.length)
  // const arr2 = arr.splice(0, k+1)

  const arr1 = arr.slice(-k);
  const arr2 = arr.slice(0, arr.length - k);


  // const arr3 = [...arr1, ...arr2]

  return [...arr1, ...arr2]
 
}

// splice 和slice区别

// splice
// splice会直接修改原数组
// 用于添加、删除数组中的元素
// splice接受至少两个参数,开始操作的索引和要删除的元素数量
// 可以添加新元素到数组中,这些元素会插入到指定的索引位置
// arr.splice(index, deleteCount, item1,..., itemX)

// slice
// 不会改变原数组,而是返回一个新数组
// 用于提取原数组的一部分,创建一个新的数组,包含从开始到结束,不包括结束选择的元素
// slice接受一个或两个参数,开始索引和结束索引(可选)
// 结束索引是可选的,如果省略,slice会提取从开始索引到数组末尾的所有元素
// arr.slice(start, [end])
  1. 给定一个整数,写一个函数来判断它是否是 3 的幂次方
function test(num) {
    if (num <= 0) return false;

    while(num > 1) {
      if (num % 3 !== 0) return false;
      num /= 3;
    }

    return num === 1
  }