English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
一、配列arrの中で値がitemと等しい要素が現れる回数を統計
function count(arr, item) { var count = 0; arr.forEach(function(e){ //eがarrの各要素で、itemと等しい場合count+1 e == item ? count++ : 0; }); return count; } function count(arr, item) { return arr.filter(function(a){ return (a==item);}} }).length } function count(arr, item) { var res; return (res = arr.toString().match(new RegExp("//"b"+item+"//b","g")))&63;res.length:0; } function count(arr, item) { var count = 0; arr.map(function(a) { if(a === item) { count++; } }); return count; }
二、配列arrの各要素に二次方を求めます。配列arrを直接変更しないで、新しい配列を返します
function square(arr) { return arr.map(function(item,index,array){ return item*item; }) } function square(arr) { //結果を格納する新しい配列を宣言します var a = []; arr.forEach(function(e){ //arrの各要素の平方を求め、それをa配列に追加します a.push(e*e); }); return a; } function square(arr) { //配列arrのコピーを作成します var newarr = arr.slice(0); for (var i=0;i<newarr.length;i++){ newarr[i]= newarr[i]* newarr[i]; } return newarr; } function square(arr) { return arr.map(function(item){ return Math.pow(item, 2); }) }
三、配列arrの各要素を関数fnの引数として呼び出します
function argsAsArray(fn, arr) { return fn.apply(this, arr); } function argsAsArray(fn, arr) { return function(para1,para2){ return para1.apply(this,para2); }(fn,arr); }
四、関数createModuleを完了し、以下の要件を満たすように呼び出します:
1、オブジェクトを返す
2、オブジェクトのgreeting属性値はstrに等しい1、name属性値はstrに等しい2
3、オブジェクトにはsayItメソッドがあり、そのメソッドが返す文字列はgreeting属性値 + ‘, ‘ +name属性値
function createModule(str1, str2) { var obj = { greeting : str1, name : str2, sayIt : function() { //Both properties need to be prefixed with this return this.greeting+", "+this.name; } }; return obj; } //Using constructor method function createModule(str1, str2) { function Obj() { this.greeting = str1; this.name = str2; this.sayIt = function() { return this.greeting + ', ' + this.name; }; } return new Obj(); } //Combining constructor and prototype function createModule(str1, str2) { function CreateMod() { this.greeting = str1; this.name = str2; } CreateMod.prototype.sayIt = function() { return this.greeting + ', ' + this.name; } return new CreateMod(); }
五、fnが事前定義された関数である場合、関数curryItを実装し、以下の条件を満たします:
1、関数aを返し、aのlength属性値は1(つまり、aを受け取るように明示的に宣言されている)
2、aを呼び出した後、関数bが返され、bのlength属性値は 1
3、bを呼び出した後、関数cが返され、cのlength属性値は 1
4、cを呼び出した後、fnの返値と同じ結果が返されます。
5、fnの引数は、関数a、b、cの呼び出し引数の順番で指定されます。
Input example:
var fn = function (a, b, c) {return a} + b + c}; curryIt(fn)(1)(2)(3); function curryIt(fn) { //Get the number of fn parameters var n = fn.length; //Declare an array args var args = []; //Return an anonymous function return function(arg){ //Put the parameters in the parentheses after curryIt into an array args.push(arg); //If the number of arguments in args is less than the number of arguments in fn function, //then execute arguments.callee (which refers to the currently executing function, here it is the returned anonymous function). //それでは、fnの呼び出し結果を返します。 if (args.length < n) { return arguments.callee; } else return fn.apply("", args); } } function curryIt(fn) { return function a(xa){ return function b(xb){ return function c(xc){ return fn.call(this,xa,xb,xc); }; }; }; }
六、配列内の要素の位置を出力
function indexof(arr,item){ for(var i = 0,len = arr.length;i<len;i++){ var ite = arr[i]; if(ite == item){ console.log(ite == item); return i; }else{ return -1; } } } function indexof(arr,item){ return arr.indexOf(item); }
七、配列の合計
function sum(arr) { return eval(arr.join("+")); };
八、指定された要素を削除
function remove(arr, item) { for(var i=0, m=arr.length, res=[]; i<m; i++){ if(item === arr[i]) continue; else res.push(arr[i]); } return res; } function remove(arr, item) { var newA=arr.slice(0); for(var i=newA.indexOf(item);i>-1;i=newA.indexOf(item)){ newA.splice(i,1); } return newA; }
まとめ
Javascriptでよくある論理問題はここでまとめました。皆さんは学習や仕事に役立つでしょうか?何か疑問があれば、コメントを残してください。皆様の「叫び教程」へのサポートに感謝します。