He estado tratando de implementar una función que dado con dos matrices,

array1‘s elementos se utilizan como condiciones para filtrar los elementos en matriz2.

Por ejemplo:

array1= [apple, grapes, oranges]

array2= [potato, pears, grapes, berries, apples, oranges]

Después de la alimentación en una función, matriz2 debe tener elementos tales como:

filter_twoArrays(array1,array2)

array2= [grapes, apples, oranges]

He probado el código siguiente, el uso de bucles for y la matriz.splice(), pero el problema que yo veo es que cuando utilizo el método de empalme, parece que los cambios de las longitudes de matriz2 en el bucle for:

function filter_twoArrays(filter,result){

  for(i=0; i< filter.length; i++){
    for(j=0; j< result.length; j++){
      if(filter[i] !== result[j]){
        result.splice(j,1)
      }
    }
  }

Cualquier aporte se agradece sobre cómo perfeccionar la función de filtro de

saludos!

InformationsquelleAutor Alejandro | 2015-05-22

5 Comentarios

  1. 14

    Puede utilizar filtro como siga

    JS:

    var array1 = ['apples', 'grapes', 'oranges', 'banana'],
      array2 = ['potato', 'pears', 'grapes', 'berries', 'apples', 'oranges'];
    
    var intersection = array1.filter(function(e) {
      return array2.indexOf(e) > -1;
    });
    
    console.log(intersection);

    Usted puede también agregar este método en la Matriz de prototipo y llamar directamente sobre la matriz de

    JS:

    Array.prototype.intersection = function(arr) {
      return this.filter(function(e) {
        return arr.indexOf(e) > -1;
      });
    };
    
    var array1 = ['apples', 'grapes', 'oranges', 'banana'],
      array2 = ['potato', 'pears', 'grapes', 'berries', 'apples', 'oranges'];
    
    var intersection = array1.intersection(array2);
    console.log(intersection);

    • Con ES6 arr1.filter(e => arr2.includes(e)).
    • Gran @Tushar, limpio!
  2. 0

    Hola, este es un porting de la función array_intersect php. Debe ser bueno para usted
    http://phpjs.org/functions/array_intersect/

    function array_intersect(arr1) {
      // discuss at: http://phpjs.org/functions/array_intersect/
      //original by: Brett Zamir (http://brett-zamir.me)
      //       note: These only output associative arrays (would need to be
      //       note: all numeric and counting from zero to be numeric)
      //  example 1: $array1 = {'a' : 'green', 0:'red', 1: 'blue'};
      //  example 1: $array2 = {'b' : 'green', 0:'yellow', 1:'red'};
      //  example 1: $array3 = ['green', 'red'];
      //  example 1: $result = array_intersect($array1, $array2, $array3);
      //  returns 1: {0: 'red', a: 'green'}
    
      var retArr = {},
        argl = arguments.length,
        arglm1 = argl - 1,
        k1 = '',
        arr = {},
        i = 0,
        k = '';
    
      arr1keys: for (k1 in arr1) {
        arrs: for (i = 1; i < argl; i++) {
          arr = arguments[i];
          for (k in arr) {
            if (arr[k] === arr1[k1]) {
              if (i === arglm1) {
                retArr[k1] = arr1[k1];
              }
              //If the innermost loop always leads at least once to an equal value, continue the loop until done
              continue arrs;
            }
          }
          //If it reaches here, it wasn't found in at least one array, so try next value
          continue arr1keys;
        }
      }
    
      return retArr;
    }
  3. 0

    Aquí está una manera simple basado en el código

    function array_filter(filter, result) {
        var filterLen = filter.length;
        var resultLen = result.length;
    
        for (i = 0; i < resultLen; i++) {
            for (j = 0; j < filterLen; j++) {
                if (!contains(filter, result[i]))
                    result.splice(i, 1);
            }
        }
    }
    
    //Return boolean depending if array 'a' contains item 'obj'
    function contains(array, value) {
        for (var i = 0; i < array.length; i++) {
            if (array[i] == value) {
                return true;
            }
        }
        return false;
    }
  4. 0

    Ya que se han etiquetado javascript aquí está la solución.

    function f1(x, y) {
        var t = y.slice(0);
        var r = [];
        for (var i = 0; i < x.length; i++) {
            for (var j = 0; j < y.length; j++) {
                if (x[i] === y[j]) {
                    [].push.apply(r, t.splice(j, 1));
                }
            }
        }
        console.log(r)
        y.length = 0;
        [].push.apply(y, r);
    }
  5. 0

    Marque los elementos que se filtra a través de delete result[index] manipularlos como sea necesario.

    JavaScript

    window.onload = runs;
    
    function runs() {
        var array1 = ["apples", "grapes", "oranges"];
        var array2 = ["potato", "pears", "grapes", "berries", "apples", "oranges"];
        var result = filter_twoArrays(array1, array2);
    
        function filter_twoArrays(filter, result) {
            var i = 0,
                j = 0;
            for (i = 0; i < result.length; i++) {
                var FLAG = 0;
                for (j = 0; j < filter.length; j++) {
                    if (filter[j] == result[i]) {
                        FLAG = 1;
                    }
                }
                if (FLAG == 0) delete result[i];
            }
            return result;
        }
    
        var body = document.getElementsByTagName("body")[0];
        var i = 0;
        for (i = 0; i < result.length; i++) {
            if (result[i] !== undefined)
                body.innerHTML = body.innerHTML + result[i] + " ";
        }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here