Company logo
  • Empleos
  • Bootcamp
  • Acerca de nosotros
  • Para profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
    • Bootcamp
  • Para empresas
    • Inicio
    • Nuestro proceso
    • Planes
    • Pruebas
    • Nómina
    • Blog
    • Comercial
    • Calculadora

0

42
Vistas
Don't understand how this code can detect the length
var data = [1, 2, 3, 5, 2, 1, 4];

// iterate over elements and filter
var res = data.filter(function (v) {
    // get the count of the current element in array
    // and filter based on the count
    return data.filter(function (v1) {
        // compare with current element
        return v1 == v;
        // check length
    }).length == 1;
});

console.log(res);

I understand all the line in this code, but I don't understand how it can detect the length==1.

(My opinion) Because it loop though every single element in the array and return boolean value either true or false so how it can use to detect the length?

This code is to get the array element that only appear once in the array.

8 months ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

  1. The return true is not to return the boolean, but when you return true from inside a filter, that item gets added to the resulting array of filter function.

  2. The process here is called chaining of methods. On line 11, first, the filter is applied to the data array, then the .length method is applied to the result of the filter, which will be an array of equal length or less than the number of elements in the data array. Then finally only once the return is called, which will be a boolean used for the outer filter.

Another example:

function reverseString (inputString) {
    return inputString.split("").reverse().join()
}

In the above example, the function returns after the split, then reverse on the split's result, then join on the reverse's result. The final resulting string is only returned.

8 months ago · Juan Pablo Isaza Denunciar

0

Don't think about it as lines of code. Split each segment of code into its true meaning my padawan

data.filter(function (v1) {
    // compare with current element
    return v1 == v;
    // check length
})

filters the data array to return an array of elements from data such that every element in it is equal to v

By checking if its length is 1, you want to return true if the the array has only 1 element.

So,

var res = data.filter(function (v) {
    // return true if there is only 1 element in data which is equal to v
});

Which basically means, we are filtering data, and returning a new array where every element is such that it has only one occurrence in the array.

8 months ago · Juan Pablo Isaza Denunciar

0

The function for filter returns a boolean, but filter itself returns an array.

So, for example:

array.filter(function(element) { return element >= 0; });

says that the function function(element) { return element >= 0; } will be applied to each element in array. Then, if the result of the function is true, that element will exist in the final, filtered version of array (which is what the filter function returns), or will not exist if the result is false.

In effect, all negative numbers from array will be filtered out because they return false.

What your code is saying is the following: For every element in data, filter data to keep only the elements equal to the current one. If this filtered list has only one element, then it can only be our current element. Therefor this element exists only once and should be kept in the final result, so we return true if .length == 1. In the end, once this is done for every element, filter is smart enough to convert those results of true and false into an array of the elements that produced true and leave out those that produced a false.

8 months ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos