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 ]
###补齐下列代码
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"
要过滤一个包含地区信息的数组,只保留前两级子地区数据,可以使用递归方法来实现。假设你有一个包含地区信息的数组,每个地区对象包含 id、name 和 children 字段,其中 children 是一个数组,包含该地区的子地区对象。以下是实现这一过滤过程的一般步骤和示例代码:
- 定义数据结构:假设每个地区对象的结构如下:
{
id: 1,
name: '地区名称',
children: [子地区对象1, 子地区对象2, ...]
}
- 递归过滤函数:编写一个递归函数来过滤数据,只保留前两级子地区。
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)
}));
}
- 应用递归函数:将该函数应用于包含地区信息的数组。
// 假设这是原始的地区数据数组
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": []
}
]
}
]