Help with the algorithm, or tell me how to solve the problem correctly.

there is a line:

'slug spider rock gravel gravel gravel gravel gravel gravel';

I want to return the sorted condition, all that is not rock, replaced by gravel. leave a rock like rock:

'gravel gravel rock gravel gravel gravel gravel gravel gravel gravel

var garden1 = 'slug spider rock gravel gravel gravel gravel gravel gravel gravel'; function filtering(value) { if (value == 'rock') { return 'rock'; } else { return 'gravel' } } function rakeGarden(garden) { var rakedGarden = garden.split(' '); rakedGarden.filter(filtering); } alert(rakeGarden(garden1)); 

    3 answers 3

    Not that function (filter) use. map () processes each element of the array. And if you need a string at the output, then you need to return (you did not have to return a value from the function) by converting the array into a string using join ()

     var garden1 = 'slug spider rock gravel gravel gravel gravel gravel gravel gravel'; function rakeGarden(garden) { var rakedGarden = garden.split(' '); return rakedGarden.map(function(value) { if (value == 'rock') { return 'rock'; } else { return 'gravel' } }).join(' '); } console.log(rakeGarden(garden1)); 

    • And why does the filter not work as I expected ?. After all, the documentation says: The filter () method creates a new array with all the elements that pass the test specified in the function being passed. Correctly, I understand that filter returns simply, and map still knows how to transform elements, and not just to compare? - spectre_it
    • one
      @ stas0k, it filters out items by condition, rather than replacing values. Look there for the first example. - Visman
    • figured out. Thank you - spectre_it

    Added another solution:

     var garden1 = 'slug spider rock gravel gravel gravel gravel gravel gravel gravel'; const rakeGarden = garden => garden .split(' ') .map(item => item === 'rock' ? 'rock' : 'gravel') .join(' ') console.log(rakeGarden(garden1)); 

      Option using a for loop:

       var garden1 = 'slug spider rock gravel gravel gravel gravel gravel gravel gravel'; function rakeGarden(garden) { var tab = garden.split(" "); for (var i = 0; i < tab.length; i++) { if (tab[i] != 'rock' && tab[i] != 'gravel') { tab[i] = 'gravel'; } } var rakedGarden = tab.join(" "); return rakedGarden; } console.log(rakeGarden(garden1));