unique:数组去重,返回一个新数组
function unique(arr){
if(!isArrayLink(arr)){ //不是类数组对象
return arr
}
let result = []
let objarr = []
let obj = Object.create(null)
arr.forEach(item => {
if(isStatic(item)){//是除了symbol外的原始数据
let key = item + '_' + getRawType(item);
if(!obj[key]){
obj[key] = true
result.push(item)
}
}else{//引用类型及symbol
if(!objarr.includes(item)){
objarr.push(item)
result.push(item)
}
}
})
return resulte}
Set简单实现
window.Set = window.Set || (function () {
function Set(arr) {
this.items = arr ? unique(arr) : [];
this.size = this.items.length; // Array的大小
}
Set.prototype = {
add: function (value) {
// 添加元素,若元素已存在,则跳过,返回 Set 结构本身。
if (!this.has(value)) {
this.items.push(value);
this.size++;
}
return this;
},
clear: function () {
//清除所有成员,没有返回值。
this.items = []
this.size = 0
},
delete: function (value) {
//删除某个值,返回一个布尔值,表示删除是否成功。
return this.items.some((v, i) => {
if(v === value){
this.items.splice(i,1)
return true
}
return false
})
},
has: function (value) {
//返回一个布尔值,表示该值是否为Set的成员。
return this.items.some(v => v === value)
},
values: function () {
return this.items
},
}
return Set;}());
unique:数组去重,返回一个新数组的更多相关文章
- concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
var arr1 = ['a', 'b', 'c']; var arr2 = ['d', 'e', 'f']; var arr3 = arr1.concat(arr2); // arr3 is a n ...
- JS对象 数组连接 concat() 方法用于连接两个或多个数组。此方法返回一个新数组,不改变原来的数组。 语法 arrayObject.concat(array1,array2,.arrayN)
concat() 方法用于连接两个或多个数组.此方法返回一个新数组,不改变原来的数组. 语法 arrayObject.concat(array1,array2,...,arrayN) 参数说明: 注意 ...
- js中实现截取数组的后几个元素作为一个新数组的方法
有时候我们会遇到这种需求,截取数组中后5个元素作为一个新数组,且顺序不能变.数组中的slice()方法和splice()方法都可以实现这样的操作. const arr = [1,2,7,2,6,0,3 ...
- filter() 方法创建一个新数组
filter快速过滤创建一个新数组 var new_array = arr.filter(callback(element[, index[, array]])[, thisArg]) 参数节 cal ...
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...
- 返回一个整数数组中最大子数组的和——java程序设计
一.题目要求 1.输入一个整形数组,数组里有正数也有负数.2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.3.求所有子数组的和的最大值.要求时间复杂度为O(n) 二.设计思想 解决 ...
- js遍历数组随机返回指定的数组结果
////随机生成数组中自定义的个数返回一个字符串数组 function getArrayItems(arr, num) { //新建一个数组,将传入的数组复制过来,用于运算,而不要 ...
- 直接提交一个form表单后台返回一个新页面通过target属性可以放到iframe当中
问题描述: 我想提交一个form表单后台直接返回一个新页面,但是当前页面还不想被替换掉: 解决方案: 在页面中添加一个iframe将form表单的target属性设置为iframe的id这样的话返回的 ...
- Array 数组filter()方法,遍历数组返回符合条件的一个新数组
<script> const arr = [ { id: 1, name: "aa", isDone: false }, { id: 2, name: "bb ...
- javaScript 获取对象数组的对象里面想要的属性,返回一个新的数组
// obj 数组 或者 对象 // arr 要获取对象数组的对象的key数组 // addProperty 可以往对象数组的每一个对象添加一个新的属性 reducedFilter(obj, arr, ...
随机推荐
- MFC中CString转int,double
CString str=L"123"; int n=_wtoi(str); //n=123 double d=_wtof(str); //d=123.0000 Vs2012中编译
- P2P 下载入门
基本概念 直链下载: https://file-examples.com/wp-content/storage/2017/04/file_example_MP4_480_1_5MG.mp4 直链就是一 ...
- JMeter手机app录制
在移动应用的性能测试中,如何准确.全面地捕捉用户操作并生成可复用的测试脚本,始终是测试工程师面临的一大挑战.而JMeter,作为一款功能强大的开源性能测试工具,不仅在Web测试中表现优异,在手机App ...
- 新一代监控神器Prometheus+Grafana介绍及使用
一.介绍 1.什么是Prometheus? 普罗米修斯是一个开源的系统监控及报警工具,在2016年加入了 Cloud Native Computing Foundation,是继Kubernetes之 ...
- 『面试题』WEB前端面试专题-Promise相关
题目一 const promise = new Promise((resolve, reject) => { console.log(1); resolve(); console.log(2); ...
- Angular 18+ 高级教程 – Routing 路由 (原理篇)
修改中... 前言 Angular 是 Single Page Application (SPA) 单页面应用,所谓的单页面是站在服务端的角度看,不管游览器请求什么路径,一律返回 index.html ...
- QT框架中的缓存:为什么有QHash和QMap,还设计了QCache和QContiguousCache?
简介 本文介绍了QT框架中可用于缓存的几个数据类型各自的特点:通过本文读者可以了解到为什么有QHash和QMap,还设计了QCache和QContiguousCache? 目录 QHash和QMap有 ...
- 系统编程-进程-探究父子进程的数据区、堆、栈空间/ 当带缓存的C库函数遇上fork
1. test1 #include <stdio.h> #include <unistd.h> #include <stdlib.h> /******全局变量位于数 ...
- [Tkey] 与非
解法原理1 首先我们需要明白 \(\operatorname{nand}\) 的运算: \[\operatorname{not}(a\operatorname{nand}b)=a\operatorna ...
- 信创环境经典版SuerMap iManager ARM版部署流程
一.环境 操作系统:银河麒麟kylin V10 CPU:鲲鹏920 SuperMap iManager 10.2.1 硬件:4H32G机器 磁盘分区格式建议如下(请严格按照如下,减少后期有用/目录资源 ...