koala-coding / day-day-up

每天进步一点点,记录每天在公司的一个小收获,一年后你回顾肯定收获了很多,哪怕是你知道了一个新函数,甚至一个新单词都可以。也算是一个个人成长秘籍吧
Apache License 2.0
9 stars 0 forks source link

2019年12月24日你要记录点什么?(实现数组去掉重复有多少方式,需要考虑性能) #16

Open koala-coding opened 4 years ago

592837154 commented 4 years ago

作业:

1. Array.from(new Set([...arr])) 
2. const fun = (arr) => {
    const result = [];
    const obj = {};
    for (i of arr){
        if(!obj[i]){
            result.push(obj[i]);
            obj[i] = 1;
        }
    }
    return result;
}

本地koa2项目跑通mongodb

mac本地安装mongodb

centos跑通mongdb

centOs安装mongodb

🤣着实不好安装🤣

koa2

const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
var mongoose = require('mongoose');
const cors = require('koa2-cors')
const db = mongoose.connect("mongodb://localhost/testDB")
// 账户的数据库模型
var UserSchema = new mongoose.Schema({
    username: String,
    password: String,
    email: String,
    constent: String,
});
var User = mongoose.model('First', UserSchema);
// 为数据库新增数据
var user = {
    username: 'zhukai',
    password: 'get请求!!',
    constent: 'get请求!!'
}
var newUser = new User(user);
newUser.save();
const app = new Koa();
const poit = 2019;
app.use(cors({
    origin: function (ctx) {
        if (/3000$/.test(ctx.header.origin)) {
            return "*";
        }
        return 'http://localhost:8080';
    },
    exposeHeaders: ['WWW-Authenticate', 'Server-Authorization', 'Date'],
    maxAge: 100,
    credentials: true,
    allowMethods: ['GET', 'POST', 'OPTIONS'],
    allowHeaders: ['Content-Type', 'Authorization', 'Accept', 'X-Custom-Header', 'anonymous'],
}));
app.use(bodyParser());

const Router = require('koa-router');
const router = new Router({
    prefix: '/api'
});
router.get('/first', async (ctx, next) => {
    // 查数据库
    const data = await User.findOne({ username: 'zhukai' })
    const result = {
        code: 200,
        data: data,
        ts: 12345
    }
    ctx.response.body = result
    return result
})
router.post('/first', async (ctx, next) => {
    ctx.response.body = ctx.request.body
})
app.use(router.routes());

app.listen(poit, () => {
    console.log(`在${poit}端口启动`);
});

😄前端,nginx服务,接口服务,数据库一家人终于整整齐齐了😄

fanglongfei321 commented 4 years ago

根据此网址地址(https://www.jianshu.com/p/6300a031dba5)查询得知 数组去重的性能问题得到一个较好的方案: //测试模板: let arr1 = Array.from(new Array(100000), (x, index)=>{ return index })

let arr2 = Array.from(new Array(50000), (x, index)=>{ return index+index })

let start = new Date().getTime() console.log('开始数组去重')

function distinct(a, b) { // 数组去重 }

console.log('去重后的长度', distinct(arr1, arr2).length)

let end = new Date().getTime() console.log('耗时', end - start) 这里我直接用最好的数组去重代码片段来表示性能最优: function distinct(a, b) { let arr = a.concat(b) let result = [] let obj = {}

for (let i of arr) {
    if (!obj[i]) {
        result.push(i)
        obj[i] = 1
    }
}
return result

} 但是我不是很理解 性能是个什么 。日后多多学习。 今日任务复习css属性 看视频2个小时以上已完成。定下英语计划。

fecym commented 4 years ago

数组中字符串键值的处理

在 JavaScript 中数组是通过数字进行索引,但是有趣的是他们也是对象,所以也可以包含 字符串 键值和属性,但是这些不会被计算在数组的长度(length)内

如果字符串键值能够被强制类型转换为十进制数字的话,它就会被当做数字索引来处理

const arr = []
arr[0] = 1
arr['1'] = '嘿嘿'
arr['cym'] = 'cym'
console.log(arr) // [1, '嘿嘿', cym: 'cym']
console.log(arr.length) // 2
sweetXiaoyan commented 4 years ago

for + splice 方式

function unique(arr){            
    for(var i=0; i<arr.length; i++){
        for(var j=i+1; j<arr.length; j++){
            if(arr[i]==arr[j]){  
                arr.splice(j,1);
                j--;
            }
        }
    }
return arr;
}
unique(array);

利用ES6 Set去重

function unique(arr){
    return Array.from(new Set(arr))
}
koala-coding commented 4 years ago

通过一篇文章,对数组去重复进行了分析

  1. 数组去重的多种方式
  2. 去重速度考虑
  3. 去重特殊情况考虑
  4. 去重内存考虑

文章地址: 如何答一道惊艳面试官的数组去重问题?