>  기사  >  웹 프론트엔드  >  JavaScript 연습을 위한 예제 튜토리얼 공유

JavaScript 연습을 위한 예제 튜토리얼 공유

零下一度
零下一度원래의
2017-06-27 10:22:351540검색
모든 분들과 토론에 오신 것을 환영합니다~
기본 연습 (1):
function array_diff(a, b) {  if (b == "") return a;  return a.filter(function(item,index,array) {var flag = false;for(var i=0;i<b.length;i++) {      if(item !== b[i]) flag = true;
    }return flag;
  });
}

The 더 나은 대답은:

function array_diff(a, b) {  return a.filter(function(x) { return b.indexOf(x) == -1; });
}

분석:

배열 a에 filter() 메서드를 사용하고 배열 a의 값이 배열 b에 존재하는지 반복적으로 확인합니다. x 값, 즉 배열 a의 값을 배열 b에서 찾을 수 없으면 b.indexOf() 메서드는 -1을 반환합니다. 배열의 filter() 메서드는 배열의 각 항목에 대해 지정된 함수를 실행하고 함수가 true를 반환할 항목으로 구성된 배열을 반환하는 것을 의미합니다.
생각이 좀 복잡하네요. 배열을 반복하기 위해 filter() 메서드를 생각했지만 함수의 판단 방법이 충분히 간결하지 않아서 잘 활용하지 못했습니다. 판단하기 위해 indexOf() 메소드를 사용할 생각은 없습니다.

참고:

filter() method은 배열의 각 항목에 대해 지정된 함수를 실행하고 해당 함수가 true를 반환하는 항목 배열을 반환하는 것을 의미합니다. 지정된 함수를 사용하여 항목이 반환된 배열에 포함되어 있는지 확인합니다.
사용 예:
var 숫자 = [1,2,3,4,5,4,3,2,1];
var filterResult = 숫자.필터(함수(항목 , 인덱스, 배열) {
Return (item>2);
});
alter(filterResult) //[3,4,5,4,3]
배열 반복 방법은 실제로 일반적으로 사용되며 배열에서 특정 작업을 반복하는 데 사용됩니다. 이러한 반복 방법은 for 루프 문보다 훨씬 간단하므로 기억하세요!
5가지 반복 방법이 있습니다: Every(), filter(), forEach(), map(), some().

기본 연습(2):

내 대답은:
var gimme = function (inputArray) {  var newArray = [];  for(var i=0;i<inputArray.length;i++) {
    newArray[i] = inputArray[i];
  }
  newArray.sort(function(a,b) {if(a < b) {      return -1;
    } else if (a> b) {return 1;
    } else {return 0;
    }
  });  return inputArray.indexOf(newArray[1]);
};

더 나은 답변은 다음과 같습니다.

function gimme(a) {  return a.indexOf(a.concat().sort(function(a, b) { return a - b })[1])
}

분석:

더 나은 답변은 원본 배열에 concat() 메서드를 사용하여 원본 배열을 복사하고 새 배열을 만들 수 있다는 것입니다. 그런 다음 새 배열이 정렬되고 중간 값에 대한 인덱스 값이 검색됩니다.
저의 생각은 최적의 솔루션과 동일하지만 구현 방법은 아직 조금 미숙합니다. 새로운 배열을 생성할 때 concat() 메소드를 사용하면 빠르게 복사할 수 있다는 점을 알 수 없는데, 이는 기본 지식이 부족하다는 의미이기도 합니다. 또, 정렬 방법에서 "return a-b"를 직접 사용할 수 있는 것으로 나타났는데, 제 방법이 굉장히 번거로운 것 같습니다.

笔记:

concat()方法可基于当前数组中的所有项创建一个新数组。该方法会先创建当前数组的一个副本,将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。在没有给concat()方法传递参数的情况下,它只是复制。若传递给concat()方法的是一个或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。若传递值不是数组,则添加到结果数组的末尾。
 
使用例子:
var colors = ["red","green","blue"];
var colors = colors.concat("yellow",["black","brown"]);
alert(colors); // red,green,blue
alert(colors); // red,green,blue,yellow,black,brown
 
重排序方法:使用sort()方法可以进行排序,但仍可能会出现一些问题,因此使用比较函数,可以避免这个问题。
对于大多数数据类型可使用,只需要将其作为参数传递给sort()方法即可:
function compare(value1,value2) {
     if(value1 < value2) {
return -1;
} else if (value1> value2) {
          return 1;
     } else {
          returm 0;
     }
}
对于数值型或其他valueOf()方法会返回数值类型的对象类型,可以使用更简单的比较函数:
function compare(value1,value2) {
     return value2 - value1;
}
 
基础练习(3):
 


我的解答为:
function minMax(arr){  var newarr = [];
  newarr.push(Math.min.apply(Math,arr));
  newarr.push(Math.max.apply(Math,arr));  return newarr;
}

较优解答为:

function minMax(arr){  return [Math.min(...arr), Math.max(...arr)];
}

分析:

这道题目就很简单了,较优解答中的扩展语法( spread syntax)也在练习一中提及了。我的写法还是太谨慎了,是不是应该大胆一些呢?
 
基础练习(4):
 


我的解答为:
function XO(str) {   var str = str.toLowerCase();   var countx = 0;   var counto = 0;   for(var i=0;i<str.length;i++) {     if(str[i] === "x") {
       countx++;
     }     if(str[i] === "o") {
       counto++;
     }
    }if(counto == countx) {      return true;
    } else {      return false;
    }
}

较优解答为:

function XO(str) {var a = str.replace(/x/gi, ''),
          b = str.replace(/o/gi, '');return a.length === b.length;
}

分析:

较优解使用的是replace()方法,结合正则表达式的使用,对原字符串str分别将x和o用空字符串替换得到a和b字符串,比较a和b字符串的长度,从而得到结果。我的解答方法呢,因为实在想不到可以使用什么方法,所以用的最原始的方法,仿佛自己在做C语言的题目。
 
笔记:
replace()方法,该方法接受两个参数,一个参数可以是一个RegExp对象或者一个字符串,第二个参数可以是一个字符串或者是一个函数。若第一个参数是字符串,指挥替换第一个子字符串。要想替换所有子字符串,是提供一个正则表达式,并且指定全局标志。
 
使用例子:
var text = "cat,bat,sat,fat";
var result = text.replace("at","ond");
alert(result); //"cond,bat,sat,fat"
 
result = text.replace(/at/g,"ond");
alert(result); //"cond,bond,song,fond"
 
 总结:
今天的知识点主要是数组的迭代方法中的一种filter()方法、数组操作方法中的concat()方法以及字符串的replace()方法。filter()方法可用于使用函数判断数组中各项的值中返回true值的结果所组成的数组。concat()可以复制和创建新数组。而replace()方法可以替换字符串中的一个或多个值。
从这三天的练习来看,对于数组的各种方法也逐渐使用得熟练起来了。但是其他类型的各种方法还是一种挑战。而我的解答也要从比较冗余的语句,写出更为简洁而有效的语句了。继续加油吧!
 
 

위 내용은 JavaScript 연습을 위한 예제 튜토리얼 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:JS实现真正的对象常量实例详解다음 기사:jQuery.undelegate()函数的使用详解

관련 기사

더보기