usuwanie elementów z tablic

1

Cześć, mam problem z usuwaniem elementów z tablic.

Chodzi o usuwanie samogłosek z wyrazu podanego jako argument funkcji.

Mam taki oto biedny kod:

const disemvowel = (str) => {
	let x = [...str];
	let z = ["a", "e", "i", "o", "u"];
	for(let i=0; i<x.length; i++) {
		for(let j=0; j<z.length; j++) {
			if (x[i] === z[j]) {
				let b = x[i];
				console.log(b);
			}
		}
	}
}

disemvowel("troll");

Doszedłem do momentu w którym wykrywam powtarzające się elementy. Teraz chciałbym usunąć powtarzające się znaki z tablicy przekazywanej jako parametr funkcji. Jak to zrobić? czytałem o map, filter i reduce ale chyba jestem na to za głupi bo nie wiem jak to zastosować do swojego kodu. Wiem że do usuwania elementów z tablicy służy splice() ale nie wiem co w sytuacji kiedy chcę usunąć więcej niż jeden element i nie wiem na którym indeksie w tablicy te elementy się mieszczą? Z góry dziękuję za pomoc.

3

wykorzystaj array.filter:

const disemvowel = str => {
    let vowels = ['a', 'e', 'i', 'o', 'u', 'y'];
    return [...str].filter(vowel =>  vowels.indexOf(vowel) < 0).join('');
};

2

Ładniej tak:

const removeChars = disallowedChars => str =>
  [...str].filter(char => !disallowedChars.includes(char)).join('')

const removeVovels = removeChars(['a', 'e', 'i', 'o', 'u', 'y'])

console.log(removeVovels('4programmers.net'))

Reużywalne i nie tworzysz tablicy przy każdym wywołaniu funkcji ;)

2

Nie wiem, czy OP wie, więc wyjaśnię (bo mi wyszukanie tego trochę zajęło na początku)

// Funkcję strzałkowe rządzą się kilkoma zasadami, które trzeba zapamiętać
// Jedną z takich rzeczy jest to, że nie trzeba pisać return, jeżeli to co jest po strzałce ma zostać zwrócone
const multiply = (a, b) => a * b;

// to jest co samo co to wyżej
function multiply (a, b) {
  return a * b;
}

// Więc co się dzieje tu:
const multiply = a => b => a * b;

// JavaScript musi coś zrobić z tym co jest pomiędzy pierwszą strzałką, a tym co ma zostać zwrócone na końcu
// (czyli w naszym przypadku => b =>), 
// więc traktuje to jako anonimową funkcje, którą zwrca, więc to jest to samo co to wyżej
function multiply (a) {
  return function(b) {
    return a * b;
  }
}

const multiply = a => b => c => d => a * b * c * d;

function multiply(a) {
  return function (b) {
    return function (c) {
      return function (d) {
        return a * b * c * d;
      };
    };
  };
};

// oczywiście dzięki closures (domknięcia) każda anonimowa funkcja pamięta parametry ze środowiska ją otaczającego
// pozawala to na coś co się nazywa currying, albo partial application, nie wiem do końca jaka jest różnica
const multiplyBy5 = multiply(5);
const multiplyBy5And10 = multiplyBy5(10);
// itd ... 
// krótko mówiąc tak jak zauważył Maciek masz uniwersalną funkcję, którą możesz wykorzystać ponownie, wystarczy, że inaczej ją sparametryzujesz
0

Dzięki wszystkim za wyjaśnienia.

Faktycznie includes() nadaje się doskonale do tego zadania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1