WEB前端资源代码:常用篇

对象的判空

  • 将json对象转化成json字符串,然后进行判断是否等于字符串‘{}‘,直接写{}无法进行判断
let isObject = {};
console.log(JSON.stringify(isObject) == ‘{}‘);
  • 使用for循环来判断,若不为空,则返回false
let listObject = { a: 1, b: 3, c: 4 };
function isEmptyObject() {
    for(let key in listObject) {
        return false;
    }
    return true;
}
console.log(isEmptyObject());
  • 使用Object.keys()来判断,返回的是一个数组,根据数组长度来判断
function isEmptyObject2(obj) {
    return Object.keys(obj).length == 0;
}
console.log(isEmptyObject2(isObject));
  • 对这个对象中一定存在的属性进行判断
console.log(isObject.id == null);

用对象的属性查找数组里的对象

var inventory = [
    {name: ‘apples‘, quantity: 2},
    {name: ‘bananas‘, quantity: 0},
    {name: ‘cherries‘, quantity: 5}
];

function findCherries(fruit) {
    return function(value){
       return value.name == fruit
    }
}
console.log(inventory.find(findCherries(‘cherries‘))); // { name: ‘cherries‘, quantity: 5 }

将对象转换成数组

Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

var obj = { foo: ‘bar‘, baz: 42 };
console.log(Object.values(obj)); // [‘bar‘, 42]

// array like object
var obj = { 0: ‘a‘, 1: ‘b‘, 2: ‘c‘ };
console.log(Object.values(obj)); // [‘a‘, ‘b‘, ‘c‘]

// array like object with random key ordering
// when we use numeric keys, the value returned in a numerical order according to the keys
var an_obj = { 100: ‘a‘, 2: ‘b‘, 7: ‘c‘ };
console.log(Object.values(an_obj)); // [‘b‘, ‘c‘, ‘a‘]

// getFoo is property which isn‘t enumerable
var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
my_obj.foo = ‘bar‘;
console.log(Object.values(my_obj)); // [‘bar‘]

// non-object argument will be coerced to an object
console.log(Object.values(‘foo‘)); // [‘f‘, ‘o‘, ‘o‘]

Object.values()详细参考地址:《MDN:Object.values(obj)

将类数组对象转换成数组

  • Array.prototype.slice.call(arguments)或者[].slice.call(arguments)
/* 该方法可以将类数组对象转换为数组,所谓类数组对象,就是含 length 和索引属性的对象
*  返回的数组长度取决于对象 length 属性的值,并且非索引属性的值或索引大于 length 的值都不会被返回到数组中
*  Array.prototype.slice.call(obj,start,end) start:方法中slice截取的开始位置,end终止位置,默认从0开始
* */
let testObject = {
    0: ‘a‘,
    1: ‘b‘,
    2: ‘c‘,
    name: ‘admin‘,
    length: 3,
};

/* 对象中必须定义length,且属性值不能为非数字,非数字无法返回 */
console.log(Array.prototype.slice.call(testObject));

/* 或者简写为[].slice.call(testObject) */
console.log([].slice.call(testObject));
  • Array.from()
/* Array、Set、Map 和字符串都是可迭代对象(WeakMap/WeakSet 并不是可迭代对象)
*  这些对象都有默认的迭代器,即具有 Symbol.iterator 属性
*  所有通过生成器创建的迭代器都是可迭代对象
*  可以用 for of 循环
 * */
let testObject2 = {
    0: ‘a‘,
    1: ‘b‘,
    2: ‘c‘,
    name: ‘admin‘,
    length: 3,
};
console.log(Array.from(testObject2));

判断是否为数组

let temporaryArray3 = [1,2,1,2,3];
console.log(temporaryArray3 instanceof Array);
console.log(temporaryArray3.constructor == Array);
console.log(Array.isArray(temporaryArray3));
console.log(Object.prototype.toString.call(temporaryArray3) === "[object Array]");

将数组转换成键值对对象

let transformObject = Object.assign({}, temporaryArray3);
console.log(transformObject);
let transformObject2 = {...temporaryArray3};
console.log(transformObject2);

深拷贝与浅拷贝

较常用的对象深拷贝方法:

let copyObject = JSON.parse(JSON.stringify(obj));
  • Object.assign

assign对对象分配赋值,实现浅拷贝,但是它有一个特殊的地方,可以处理第一层的深拷贝。
assign(targetObject, obj, obj1) assign会改变targetObject的值,较好的做法就是将targetObject定义为空对象{}
assign是将这个3者合并,若有相同的属性,后面的属性会覆盖前面对象的属性

let temporaryObject2 = {a: 1, d: {e: 3}};
let temporaryObject3 = {b: 1,a: 2};
let mergeObject = Object.assign({}, temporaryObject2, temporaryObject3);
console.log(mergeObject);
/* mergeObject.d.e不会改变temporaryObject2里a的值,但会改变temporaryObject2里e的值 */
mergeObject.a = 5;
mergeObject.d.e = 5;
console.log(mergeObject);
  • 数组slice浅拷贝
let copyArray1 = copyArray.slice(0);
  • 数组concat浅拷贝
let copyArray2 = copyArray.concat();

Date类的相关例

// 以chrome为例
new Date();
// Mon Oct 23 2017 23:38:02 GMT+0800 (CST)

new Date(false);
// Thu Jan 01 1970 08:00:00 GMT+0800 (CST)

new Date(0);
// Thu Jan 01 1970 08:00:00 GMT+0800 (CST)

new Date(null);
// Thu Jan 01 1970 08:00:00 GMT+0800 (CST)

new Date(‘‘);
// Invalid Date

new Date(undefined);
// Invalid Date

详情参考:你可能不知道的 Date 类

JS 将有父子关系的数组转换成树形数据

data.forEach(ele => {
      let parentId = ele.parentId;
      if (parentId === 0) {
        //是根元素的hua ,不做任何操作,如果是正常的for-i循环,可以直接continue.
      } else {
        //如果ele是子元素的话 ,把ele扔到他的父亲的child数组中.
        data.forEach(d => {
          if (d.id === parentId) {
            let childArray = d.child;
            if (!childArray) {
              childArray = []
            }
            childArray.push(ele);
            d.child = childArray;
          }
        })
      }
    });
    //去除重复元素
    data = data.filter(ele => ele.parentId === 0);
    console.log(‘最终等到的tree结构数据: ‘, data);

前端通过Blob下载文件流

先看下网上一个简单的代码片段:

let blob = new Blob([res], {
    type: `application / pdf` //word文档为msword,pdf文档为pdf
});
let objectUrl = URL.createObjectURL(blob);
let link = document.createElement("a");
let fname = `我的文档`; //下载文件的名字
link.href = objectUrl;
link.setAttribute("download", fname);
document.body.appendChild(link);
link.click();

全面:

/**
 * @param {String} resource 文件流
 * @param {String} fileType 文件类型
 * @param {String} fileName 文件名
 * */
var downloadBlob=function(resource,fileType,fileName){
    var data = new Blob([resource],{
        type:fileType
    });
    if(‘download‘ in document.createElement(‘a‘)){ //非IE
        var downloadUrl = window.URL.createObjectURL(data);
        var anchor = document.createElement("a");
        anchor.href = downloadUrl;
        anchor.download = fileName;
        anchor.style.display = ‘none‘;
        document.body.appendChild(anchor);
        anchor.click();
        window.URL.revokeObjectURL(anchor.href);
        document.body.removeChild(anchor);
    }else{ //IE10+下载
        navigator.msSaveBlob(data, fileName);
    }

}

调用方式:

downloadBlob(res,‘application/pdf‘,‘文档名称‘)

原文地址:https://www.cnblogs.com/moqiutao/p/9848991.html

时间: 2024-10-03 13:48:36

WEB前端资源代码:常用篇的相关文章

WEB前端资源代码:面试篇

1.JS找字符串中出现最多的字符 例如:求字符串'nininihaoa'中出现次数最多字符 方法一: var str = "nininihaoa"; var o = {}; for (var i = 0, length = str.length; i < length; i++) { var char = str.charAt(i); if (o[char]) { o[char]++; //次数加1 } else { o[char] = 1; //若第一次出现,次数记为1 } }

WEB前端资源代码:问题篇

1.web扫码登录怎么实现,思路? 步骤 WEB平台 手机 第1步 生成二维码 第2步 (ajax监控后台) 扫码 第3步 (ajax监控后台) 确定(后台异步通知WEB平台) 第4步 AJAX发现状态改变,登陆成功 ajax监控后台的流程:生成二维码后 setTimeout(function(){ //AJAX请求,检测状态 },5000); 整体思路: 1.前端调用后台生成二维码的API,获取到二维码图片和所包含的信息(通常是一个唯一ID) 2.前端检测(通过轮询或者websock,自己选择

WEB前端资源代码:CSS篇

css3新单位vw.vh.vmin.vmax vh: 相对于视窗的高度, 视窗被均分为100单位的vh; vw: 相对于视窗的宽度, 视窗被均分为100单位的vw; vmax: 相对于视窗的宽度或高度中较大的那个.其中最大的那个被均分为100单位的vmax; vmin: 相对于视窗的宽度或高度中较小的那个.其中最小的那个被均分为100单位的vmin; 视区所指为浏览器内部的可视区域大小, 即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工

WEB前端资源代码:学习篇

1.JS设计模式片段 Function.prototype.addMethod = function (name,fn) { this.prototype[name] = fn; return this; }; var Methods = function(){}; Methods.addMethod('checkName',function () { //验证姓名 console.log('姓名'); }).addMethod('checkEmail',function () { //验证邮箱

web前端编写代码常用软件

Adobe Photoshop cc 简称ps 切图工具测量工具 Dreamweaver 别称梦想编织者,新手入门,建议关了代码提示 Atom github团队写的还没用过 Sublime Text 功能强大,小巧,提示强大 brackets adobe团队写的,免费,简约 Webstrom 传说编写js和使用库的神器 Notepad++ 小巧的文本编译器 Beyond compare Hbuilder 编写html.css.js很好用,缺点是对于一些新的库和框架没有代码智能提示

WEB前端资源代码:PS记录

1.相邻2个层合并的快捷键方法:先选择上面的一个层,再按ctrl+e. 2.合并一个组内的多个层或组:在该组单击右键,选择“转换为智能对象”,然后可对其进行其它操作,比如:截取该组的为一张图片:ctrl+"鼠标左点击该组". 3.复制一个层,对该层设置前景色和背景色设置:背景色快捷键 :Ctrl+Delete:前景色快捷键Alt+Delete. 4.移动一张jpg图片内的文字或者里面的小图片等内容:首先选中“要移动的内容”,第二,新建新层,然后点击 “移动工具”,点击左右箭头移动内容,

好程序员web前端分享HTML基础篇

好程序员web前端分享HTML基础篇,最近遇到很多新手,都会问,如果要学web前端开发,需要学什么?难不难学啊?多久能入门之类的问题?那么今天好程序员就先来给大家分享一下web前端学习路线:HTML基础 学习目标 1.本专业介绍.HTML相关概念,HTML发展历史 2.WEB标准,W3C/WHATWG/ECMA相关概念 3.相关软件的应用以及站点的创建 4.HTML基本结构和HTML语法 5.HTML常用标记 一.本专业介绍.HTML相关概念,HTML发展历史 本专业介绍 移动前端/WEB前端

HBuilder:一个不错的web前端IDE(代码编辑器)

Web前端开发,2000之后基本就是三剑客的天下.到现在DW也是不错的HTMLcoder,如今的前端开发早已是JS的天下.但是DW对于JS方面就弱爆了.DW虽然支持JS语法高亮也支持JQuery JqueryMobile 甚至还支持Phonegap.但是对于JS的支持到了有的程度而已,语法高亮.语法提示仅此而已了.我们需要的是什么呢? 1.高度匹配的语法提示,例如我定义了哪些空间,语法提示至少可以自动提示控件的ID,控件对应的方法函数,自定义函数的语法提示. 2.JS与HTML的大纲导航 3.J

必知干货:Web前端应用十种常用技术你全都知道吗?

Web前端应用十种常用技术,随着JS与XHTML的应用普及,越来越多的web界面应用技术出现在网站上,比如我们常见的日历控件,搜索下拉框等,这些web界面应用技术大大的丰富了网站的表现形式,本文将为您精心推荐十种最常见的web界面应用技术. Web应用程序的界面设计,其核心就是网页设计 ,但它的重点主要是在功能方面.要超越桌面应用程序, Web应用程序必须提供简单.直观和即时响应的用户界面,让他们的用户花更少的精力和时间去完成事情. 以前,我们并没有注意到web应用程序这个方式,但是现在是时候仔