js笔试题

146 阅读11分钟

1 找出数组中只出现一次的元素,给定一个整型数组,找出所有在该数组中只出现一次的元素,并返回。例如: 输入 A=[2,2,4,1,3,5,6,3,2];输出:[4,1,5,6]

  • 可以判断元素出现的位置:如果第一次出现的位置和最后一次出现的位置是一样的,则表示只出现了一次
function FindNumsAppearOnce(array)
{
    // return list, 比如[a,b],其中ab是出现一次的两个数字
    var res = [];
    for (let i = 0;i<array.length;i++){
        if(array.indexOf(array[i]) === array.lastIndexOf(array[i])){
            res.push(array[i]);
        }
    }
    console.log(res);
}
var len = [1,1,2,2,3,4,4];
FindNumsAppearOnce(len);  // [3]

  • 利用map记录每个元素出现的次数
function FindNumsAppearOnce2(array) {
  const map = {},
    res = [];
  for (let i = 0; i < array.length; i++) {
    if (!map[array[i]]) {
      map[array[i]] = 1;
    } else {
      map[array[i]]++;
    }
  }
  for (let i = 0; i < array.length; i++) {
    if (map[array[i]] === 1) {
      res.push(array[i]);
    }
  }
  console.log(res);
}
var len = [1,1,2,2,3,4,4];
FindNumsAppearOnce2(len);  // [3]

  • 先排序,再对比
var arr = [3,6,3,5,2,7,6,7,9];
var list = singleNumbers(arr);
console.log(list);  // 2,5,9
function singleNumbers (arr) {
  arr.sort();
  var list = [];  // 保存单个的元素
  for (var i = 0; i < arr.length;) {
    if (i + 1 >= arr.length) {
      list.push(arr[i]);
      break;
    }
    if (arr[i] == arr[i+1]) {
      i = i + 2;
    } else {
      list.push(arr[i]);
      i = i + 1;
    }
  }
  return list;
}

2. 数组元素去重,给定一个整型数组,去除其中重复的元素,并返回去重后的数组,无需考虑顺序,考虑如何不通过辅助数组方式实现。例如:[2,2,3,,1,1,4,,8,9,4,4] => [2,3,1,4,8,9]

  • 利用Set()+Array.from()
const arr = [2,2,3,,1,1,4,,8,9,4,4]
const result = Array.from(new Set(arr))
console.log(result) // [ 2,3,undefined,1,4,8,9 ]
  • 利用两层循环+数组的splice方法
function removeDuplicate(arr) {
  let len = arr.length
  for (let i = 0; i < len; i++) {
    for (let j = i + 1; j < len; j++) {
      if (arr[i] === arr[j]) {
        arr.splice(j, 1)
        len-- // 减少循环次数提高性能
        j-- // 保证j的值自加后不变
      }
    }
  }
  return arr
}

const result = removeDuplicate(arr)
console.log(result) // [ 1, 2, 'abc', true, false, undefined, NaN, NaN ]

  • 利用数组的indexOf方法
function removeDuplicate(arr) {
  const newArr = []
  arr.forEach(item => {
    if (newArr.indexOf(item) === -1) {
      newArr.push(item)
    }
  })
  return newArr // 返回一个新数组
}

const result = removeDuplicate(arr)
console.log(result) // [ 1, 2, 'abc', true, false, undefined, NaN, NaN ]
  • 利用数组的includes方法
function removeDuplicate(arr) {
  const newArr = []
  arr.forEach(item => {
    if (!newArr.includes(item)) {
      newArr.push(item)
    }
  })
  return newArr
}

const result = removeDuplicate(arr)
console.log(result) // [ 1, 2, 'abc', true, false, undefined, NaN ]
  • 利用数组的filter()+indexOf()

function removeDuplicate(arr) {
  return arr.filter((item, index) => {
    return arr.indexOf(item) === index
  })
}

const result = removeDuplicate(arr)
console.log(result) // [ 1, 2, 'abc', true, false, undefined ]
  • 利用Map()
function removeDuplicate(arr) {
  const map = new Map()
  const newArr = []

  arr.forEach(item => {
    if (!map.has(item)) { // has()用于判断map是否包为item的属性值
      map.set(item, true) // 使用set()将item设置到map中,并设置其属性值为true
      newArr.push(item)
    }
  })

  return newArr
}

const result = removeDuplicate(arr)
console.log(result) // [ 1, 2, 'abc', true, false, undefined, NaN ]
  • 利用对象
function removeDuplicate(arr) {
  const newArr = []
  const obj = {}

  arr.forEach(item => {
    if (!obj[item]) {
      newArr.push(item)
      obj[item] = true
    }
  })

  return newArr
}

const result = removeDuplicate(arr)
console.log(result) // [ 1, 2, 'abc', true, false, undefined, NaN ]

juejin.cn/post/704861…

###补齐下列代码

function dispatch() {

}

/**
 * 测试代码,请勿修改
 */
// console.clear();
dispatch('AliCloud1');
// 控制台打印 "AliCloud1"
dispatch('AliCloud2').println('done');
// 控制台打印 "AliCloud2"
// 控制台打印 "done"
dispatch('AliCloud3').wait(3).println('commit');
// 控制台打印 "AliCloud3"
// 等待3秒
// 控制台打印 "commit"
dispatch('AliCloud4').waitFirst(6).println('push');
  // 等待6秒
  // 控制台打印 "AliCloud"
  // 控制台打印 "push"

要过滤一个包含地区信息的数组,只保留前两级子地区数据,可以使用递归方法来实现。假设你有一个包含地区信息的数组,每个地区对象包含 idnamechildren 字段,其中 children 是一个数组,包含该地区的子地区对象。以下是实现这一过滤过程的一般步骤和示例代码:

  1. 定义数据结构:假设每个地区对象的结构如下:
{
    id: 1,
    name: '地区名称',
    children: [子地区对象1, 子地区对象2, ...]
}
  1. 递归过滤函数:编写一个递归函数来过滤数据,只保留前两级子地区。
function filterRegions(regions, level = 0) {
    if (level >= 2) {
        return []; // 如果已经达到第二级子地区,返回空数组
    }

    return regions.map(region => ({
        id: region.id,
        name: region.name,
        children: filterRegions(region.children, level + 1)
    }));
}
  1. 应用递归函数:将该函数应用于包含地区信息的数组。
// 假设这是原始的地区数据数组
let regions = [
    {
        id: 1,
        name: '中国',
        children: [
            {
                id: 101,
                name: '华东',
                children: [
                    { id: 1001, name: '上海' },
                    { id: 1002, name: '江苏' }
                ]
            },
            {
                id: 102,
                name: '华北',
                children: [
                    { id: 1003, name: '北京' },
                    { id: 1004, name: '天津' }
                ]
            }
        ]
    },
    // 可能还有更多的地区数据...
];

// 调用过滤函数,保留前两级子地区
let filteredRegions = filterRegions(regions);

console.log(filteredRegions);

在这个示例中,filterRegions 函数会递归地遍历每个地区对象,如果当前层级 level 大于等于 2,则直接返回空数组;否则,继续遍历该地区对象的子地区,并递归应用相同的过滤逻辑。

通过这样的方法,你可以得到一个只包含前两级子地区的新数组 filteredRegions。请根据实际的数据结构和需求调整代码,以适应你的具体情况。

let arr = [
	{
		"id": "150000000",
		"createTime": "2024-06-12 17:30:17",
		"updateTime": null,
		"creator": null,
		"modifier": null,
		"version": null,
		"deleteFlag": false,
		"regionCode": "150000000",
		"regionName": "内蒙古自治区",
		"children": [
			{
				"id": "150100000",
				"createTime": "2024-06-12 17:30:17",
				"updateTime": null,
				"creator": null,
				"modifier": null,
				"version": null,
				"deleteFlag": false,
				"regionCode": "150100000",
				"regionName": "呼和浩特市",
				"children": [
					{
						"id": "150101000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150101000",
						"regionName": "市辖区",
						"children": null,
						"parentId": "150100000",
						"path": "150000000,150100000,150101000",
						"_ext": null
					},
					{
						"id": "150102000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150102000",
						"regionName": "新城区",
						"children": null,
						"parentId": "150100000",
						"path": "150000000,150100000,150102000",
						"_ext": null
					},
					{
						"id": "150103000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150103000",
						"regionName": "回民区",
						"children": null,
						"parentId": "150100000",
						"path": "150000000,150100000,150103000",
						"_ext": null
					},
					{
						"id": "150104000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150104000",
						"regionName": "玉泉区",
						"children": null,
						"parentId": "150100000",
						"path": "150000000,150100000,150104000",
						"_ext": null
					},
					{
						"id": "150105000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150105000",
						"regionName": "赛罕区",
						"children": null,
						"parentId": "150100000",
						"path": "150000000,150100000,150105000",
						"_ext": null
					},
					{
						"id": "150121000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150121000",
						"regionName": "土左旗",
						"children": null,
						"parentId": "150100000",
						"path": "150000000,150100000,150121000",
						"_ext": null
					},
					{
						"id": "150122000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150122000",
						"regionName": "托克托县",
						"children": null,
						"parentId": "150100000",
						"path": "150000000,150100000,150122000",
						"_ext": null
					},
					{
						"id": "150123000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150123000",
						"regionName": "和林格尔县",
						"children": null,
						"parentId": "150100000",
						"path": "150000000,150100000,150123000",
						"_ext": null
					},
					{
						"id": "150124000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150124000",
						"regionName": "清水河县",
						"children": null,
						"parentId": "150100000",
						"path": "150000000,150100000,150124000",
						"_ext": null
					},
					{
						"id": "150125000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150125000",
						"regionName": "武川县",
						"children": null,
						"parentId": "150100000",
						"path": "150000000,150100000,150125000",
						"_ext": null
					}
				],
				"parentId": "150000000",
				"path": "150000000,150100000",
				"_ext": null
			},
			{
				"id": "150200000",
				"createTime": "2024-06-12 17:30:17",
				"updateTime": null,
				"creator": null,
				"modifier": null,
				"version": null,
				"deleteFlag": false,
				"regionCode": "150200000",
				"regionName": "包头市",
				"children": [
					{
						"id": "150201000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150201000",
						"regionName": "市辖区",
						"children": null,
						"parentId": "150200000",
						"path": "150000000,150200000,150201000",
						"_ext": null
					},
					{
						"id": "150202000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150202000",
						"regionName": "东河区",
						"children": null,
						"parentId": "150200000",
						"path": "150000000,150200000,150202000",
						"_ext": null
					},
					{
						"id": "150203000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150203000",
						"regionName": "昆都仑区",
						"children": null,
						"parentId": "150200000",
						"path": "150000000,150200000,150203000",
						"_ext": null
					},
					{
						"id": "150204000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150204000",
						"regionName": "青山区",
						"children": null,
						"parentId": "150200000",
						"path": "150000000,150200000,150204000",
						"_ext": null
					},
					{
						"id": "150205000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150205000",
						"regionName": "石拐区",
						"children": null,
						"parentId": "150200000",
						"path": "150000000,150200000,150205000",
						"_ext": null
					},
					{
						"id": "150206000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150206000",
						"regionName": "白云鄂博矿区",
						"children": null,
						"parentId": "150200000",
						"path": "150000000,150200000,150206000",
						"_ext": null
					},
					{
						"id": "150207000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150207000",
						"regionName": "九原区",
						"children": null,
						"parentId": "150200000",
						"path": "150000000,150200000,150207000",
						"_ext": null
					},
					{
						"id": "150221000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150221000",
						"regionName": "土默特右旗",
						"children": null,
						"parentId": "150200000",
						"path": "150000000,150200000,150221000",
						"_ext": null
					},
					{
						"id": "150222000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150222000",
						"regionName": "固阳县",
						"children": null,
						"parentId": "150200000",
						"path": "150000000,150200000,150222000",
						"_ext": null
					},
					{
						"id": "150223000",
						"createTime": "2024-06-12 17:30:17",
						"updateTime": null,
						"creator": null,
						"modifier": null,
						"version": null,
						"deleteFlag": false,
						"regionCode": "150223000",
						"regionName": "达茂联合旗",
						"children": null,
						"parentId": "150200000",
						"path": "150000000,150200000,150223000",
						"_ext": null
					}
				],
				"parentId": "150000000",
				"path": "150000000,150200000",
				"_ext": null
			},
		],
		"parentId": null,
		"path": "150000000",
		"_ext": null
	}
]
let ww = filterRegions(arr)

//打印结果
[
    {
        "id": "150000000",
        "regionName": "内蒙古自治区",
        "children": [
            {
                "id": "150100000",
                "regionName": "呼和浩特市",
                "children": []
            },
            {
                "id": "150200000",
                "regionName": "包头市",
                "children": []
            }
        ]
    }
]