前端开发需要什么算法?程序算法篇整理

前端开发需要什么算法|前端开发者

web前端面试题整理(程序篇)

####1. var obj = {a : 1}; (function (obj) { obj = {a : 2}; })(obj); //问obj的值会改变吗?
javascript 代码

var obj = {
a: 1
};
(function (obj) {
obj={
a: 2
};
})(obj);
//问obj的值会改变吗?

外部的obj不变.
因为匿名函数中obj传入参数等于是创建了一个局部变量obj, 里面的obj指向了一个新的对象 . 如果改成(function () { obj = {a : 2}; })(obj); 就会改变了

####2. var obj = { a:1, func: function() { (function () { a=2; }(); }} ; obj.func() //obj中a的值会改变吗? 匿名函数里的this指向的是什么?
javascript 代码

var obj = {
a: 1,
func:function(){
(function () {
a=2;
}();
}
};
obj.func();
//obj中a的值会改变吗? 匿名函数里的this指向的是什么?

obj里的a不会变. 匿名函数里的this指向全局对象window. 这等于是给window加了一个名为a的属性
要改变obj中a的值 , 应当:
javascript 代码

(function() {
this.a=2
}).call(this);

或者obj中定义
javascript 代码

func: function () {
varself=this;
(function () {
self.a=2;
})();
}

####3. 要实现函数内每隔5秒调用自己这个函数,100次以后停止,怎么办?
javascript 代码

(function () {
varindex=0;
functionfn(){
if (index<100) {
index++;
setTimeout(function(){
fn();
},5000);
}
}
fn();
})();

####4. 点击一个ul的五个li元素,分别弹出他们的序号,怎么做?
方法1 :**javascript 代码**

var oLi = document.getElementsByTagName(‘li’);
for (var i = 0; i < oLis.length; i++) {
oLis[i].onclick= (function(j){
returnfunction(){
alert(j);
}
})(i);
}

方法2:**javascript 代码**

var oLi = document.getElementsByTagName(‘li’);
for (var i = 0; i < oLi.length; i++) {
(function (j) {
oLi[j].onclick=function(){
alert(j);
};
})(i);
}

方法3:**javascript 代码**

var oLi = document.getElementsByTagName(‘li’);
for (var i = 0; i < oLi.length; i++) {
oLi[i].index =i;
oLi[i].onclick=function(){
alert(this.index);
}
}

####5. js实现数组去重怎么实现?
方法1.创建一个新的临时数组来保存数组中已有的元素
javascript 代码

var a = new Array(1, 2, 2, 2, 2, 5, 3, 2, 9, 5, 6, 3);
Array.prototype.unique1 = function () {
varn= [];//一个新的临时数组
for (vari=0;i<this.length;i++) {
//如果把当前数组的第i已经保存进了临时数组, 那么跳过
if (n.indexOf(this[i]) ==-1) {
n.push(this[i]);
}
}
returnn;
}
console.log(a.unique1());

方法2.使用哈希表存储已有的元素javascript 代码

Array.prototype.unique2 = function () {
varhash={},
n= [];//hash 作为哈希表, n为临时数组
for (vari=0;i<this.length;i++) {
if (!hash[this[i]]) {//如果hash表中没有当前项
hash[this[i]] =true;//存入hash表
n.push(this[i]);//当前元素push到临时数组中
}
}
returnn;
}

方法3.使用indexOf判断数组元素第一次出现的位置是否为当前位置javascript 代码

Array.prototype.unique3 = function () {
varn= [this[0]];
for (vari=1;i<this.length;i++) //从第二项开始遍历
{
//如果当前数组元素在数组中出现的第一次的位置不是i
//说明是重复元素
if (this.indexOf(this[i]) ==i) {
n.push(this[i]);
}
}
returnn;
}

方法4. 先排序再去重javascript 代码

Array.prototype.unique4 = function () {
this.sort(function(a,b){
returna-b;
});
varn= [this[0]];
for (vari=1;i<this.length;i++) {
if (this[i] !=this[i-1]) {
n.push(this[i]);
}
}
returnn;
}

第一种方法和第三种方法都使用了indexOf(), 这个函数的执行机制也会遍历数组
第二种方法使用了一个哈希表, 是最快的.
第三种方法也有一个排序的复杂度的计算.

第三种方法总是第二种方法的将近两倍, 而第四种方法与数组的范围有关,

 

而第二种方法永远是最好的, 但是是以空间换时间
全部代码如下javascript 代码

var a = [];
for (var i = 0; i < 1000000; i++) {
a.push(Math.ceil(Math.random() *10000));
}
Array.prototype.unique1 = function () {
varn= [];//一个新的临时数组
for (vari=0;i<this.length;i++) {
//如果把当前数组的第i已经保存进了临时数组, 那么跳过
if (n.indexOf(this[i]) ==-1) {
n.push(this[i]);
}
}
returnn;
}
Array.prototype.unique2 = function () {
varhash={},
n= [];//hash 作为哈希表, n为临时数组
for (vari=0;i<this.length;i++) {
if (!hash[this[i]]) {//如果hash表中没有当前项
hash[this[i]] =true;//存入hash表
n.push(this[i]);//当前元素push到临时数组中
}
}
returnn;
}
Array.prototype.unique3 = function () {
varn= [this[0]];
for (vari=1;i<this.length;i++) //从第二项开始遍历
{
//如果当前数组元素在数组中出现的第一次的位置不是i
//说明是重复元素
if (this.indexOf(this[i]) ==i) {
n.push(this[i]);
}
}
returnn;
}
Array.prototype.unique4 = function () {
this.sort(function(a,b){
returna-b;
});
varn= [this[0]];
for (vari=1;i<this.length;i++) {
if (this[i] !=this[i-1]) {
n.push(this[i]);
}
}
returnn;
}
var begin1 = new Date();
a.unique1();
var end1 = new Date();
var begin2 = new Date();
a.unique2();
var end2 = new Date();
var begin3 = new Date();
a.unique3();
var end3 = new Date();
var begin4 = new Date();
a.unique4();
var end4 = new Date();
console.log(“方法一执行时间:” + (end1 – begin1));
console.log(“方法二执行时间:” + (end2 – begin2));
console.log(“方法三执行时间:” + (end3 – begin3));
console.log(“方法四执行时间:” + (end4 – begin4));
前端开发需要什么算法|网站前端开发
https://www.rokub.com
» 本文来自:前端开发者 » 《前端开发需要什么算法?程序算法篇整理》
» 本文链接地址:https://www.rokub.com/3087.html
» 您也可以订阅本站:https://www.rokub.com
赞(0)
64K

评论 抢沙发

评论前必须登录!