English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Problemas lógicos comunes en Javascript y métodos de solución

一、统计数组 arr 中值等于 item 的元素出现的次数

function count(arr, item) {
   var count = 0;
   arr.forEach(function(e){
     //e为arr中的每一个元素,与item相等则count+1
     e == item ? count++ : 0;
   });
   devolver count;
 }
function count(arr, item) {
  return arr.filter(function(a){
    devolver (a==item);
  }).length
}
function count(arr, item) {
var res;
devolver (res = arr.toString().match(new RegExp("//"b"+item+"//b","g")))?res.length:0;
}
function count(arr, item) {
      var count = 0;
      arr.map(function(a) {
        if(a === item) {
          count++;
        }
      });
      devolver count;
    }

segundo, calcular el cuadrado de cada elemento del array arr. No modificar directamente el array arr, devolver un nuevo array como resultado

function square(arr) {
  devolver arr.map(function(item,index,array){
    devolver item*item;
  })
}
function square(arr) {
  //declarar un nuevo array para almacenar los resultados
   var a = [];
   arr.forEach(function(e){
     //sumar al array a cada elemento al cuadrado del array arr
     a.push(e*e);
   });
   devolver a;
 }
function square(arr) {
//copiar un array arr
  var newarr = arr.slice(0);
  for (var i=0;i<newarr.length;i++){
    newarr[i]= newarr[i];* newarr[i];
  }
  devolver newarr;
}
function square(arr) {
  devolver arr.map(function(item){
    devolver Math.pow(item, 2);
  })
}

tercero, tomar cada elemento del array arr como parámetro de la función fn

function argsAsArray(fn, arr) {
 devolver fn.apply(this, arr);
 }
function argsAsArray(fn, arr) {
  devolver una función(para1,para2){ 
    devolver para1.apply(this,para2);
  }(fn,arr);
}

cuarto, completar la función createModule, después de llamarla debe cumplir con los siguientes requisitos:

     1devuelve un objeto

     2el valor de atributo greeting del objeto es igual a str1la valor de atributo de nombre es igual a str2

     3de objeto tiene un método sayIt, que devuelve una cadena de valor de atributo greeting + ‘, ‘ +valor de atributo de nombre

function createModule(str1, str2) {
   var obj = {
     greeting : str1,
     name   : str2,
     sayIt  : function(){
       //ambos atributos deben preceder con this
       return this.greeting+", "+this.name;
     }
   };
   return obj;
 }
//método de constructor
function createModule(str1, str2) {
  function Obj(){
    this.greeting = str1;
    this.name = str2;
    this.sayIt = function(){
      return this.greeting + ', ' + this.name;
    };
  }
  return new Obj();
}
//combinación de constructor y prototipo
function createModule(str1, str2) {
  function CreateMod(){
    this.greeting = str1;
    this.name = str2;
  }
  CreateMod.prototype.sayIt = function(){
    return this.greeting + ', ' + this.name;
  }
  return new CreateMod();
}

Cinco, dado que fn es una función predefinida, realiza la función curryIt, después de la llamada, cumple con las siguientes condiciones:

      1devuelve una función a, el valor de length de a es1esto es equivalente a declarar explícitamente que a reciba un parámetro)

      2después de llamar a a, se devuelve una función b, el valor de length de b es 1

      3después de llamar a b, se devuelve una función c, el valor de length de c es 1

      4después de llamar a c, el resultado de la llamada coincide con el valor de retorno de fn

      5los argumentos de fn son los parámetros de llamada de las funciones a, b, c

Ejemplo de entrada:

var fn = function (a, b, c) {return a} + b + c}; curryIt(fn)(1)(2)(3);
function curryIt(fn) {
   //obtiene la cantidad de parámetros de fn
   var n = fn.length;
   //declara un array args
   var args = [];
   //devuelve una función anónima
   return function(arg){
     //pone los parámetros entre paréntesis después de curryIt en un array
     args.push(arg);
     //si el número de argumentos en args es menor que el número de argumentos de la función fn,
     //entonces ejecuta arguments.callee(que tiene la función de referir a la función en ejecución, aquí es el retorno de la función anónima actual)。
     //de lo contrario, devuelve el resultado de la llamada de 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);
      };
    };
  };
}

Sexto, salida de la posición del elemento en el array

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);
}

Séptimo, suma del array

function sum(arr) {
  return eval(arr.join("+"));
};

Octavo, eliminar el elemento dado

  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;
}

Resumen

La resumen de los problemas lógicos comunes en JavaScript se detiene aquí, ¿saben todos si lo han aprendido? El contenido de este artículo les ha sido útil en su aprendizaje o trabajo, si tienen alguna pregunta, pueden dejar un comentario para intercambiar, gracias por su apoyo a los tutoriales de clamor.

Te gustará