01.06.2015, 22:23
|
Новичок на форуме
|
|
Регистрация: 26.04.2015
Сообщений: 7
|
|
Найти совпадения в тексте
Здравствуйте форумчане, по заданию нужно создать текстовое поле и ввести в него слова через запятую, проанализировать его и вывести результаты по 6 критериям:
Все гласные буквы, которые входят в каждое слово
Все согласные буквы, которые не входят ни в одно слово
Все звонкие согласные буквы, которые входят хотя бы в одно слово
Все глухие согласные, которые не входят хотя бы в одно слово
Все согласные буквы, которые входят только в одно слово
Все глухие согласные буквы, которые не входят только в одно слово
Написано что нужно реализовать при помощи объекта Array и его методов.
Подскажите пожалуйста с помощью каких методов такое возможно реализовать... буду благодарен любой помощи.
Я знаю только один - split - с помощь его я превратил сроку текста в массив из слов, а что дальше делать хз...
|
|
01.06.2015, 23:21
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
Сообщение от HelloDarkness
|
Все гласные буквы, которые входят в каждое слово
|
создать массив гласных букв -- отфильтровать по всем словам.
то есть кроме массива слов нужно 6 массивов для фильтрации.
можно циклом , можно http://learn.javascript.ru/array-iteration
вы начните.
|
|
02.06.2015, 00:43
|
Новичок на форуме
|
|
Регистрация: 26.04.2015
Сообщений: 7
|
|
Сообщение от рони
|
создать массив гласных букв -- отфильтровать по всем словам.
то есть кроме массива слов нужно 6 массивов для фильтрации.
можно циклом , можно http://learn.javascript.ru/array-iteration
вы начните.
|
Спасибо, но, если я правильно понял, то нам хватит и четырех массивов:
- Гласных
- Согласных
- Звонких согласных
- Глухих согласных
т.к. согласные и глухие по заданию используются дважды
И я не понял как "отфильтровать по всем словам" допустим я имею 2 массива:
var array1 = [мать, отец, сын];
var array2 = [а, у, о, ы, и, э, я, ю, ё, е];
как мне с помощью второго отфильтровать первый по заданным условиям?
Последний раз редактировалось HelloDarkness, 02.06.2015 в 00:51.
|
|
02.06.2015, 00:53
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
HelloDarkness,
function blender(letters, words, select) {
return letters.filter(function(letter) {
return words.every(function(word) {
return word.toLowerCase().indexOf(letter.toLowerCase()) != -1 ? select : !select
})
})
};
var test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], true)
alert(test);//буквы которые входят в каждое слово [O]
test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], false)
alert(test);//буквы которых нет в каждом слове [Ё,У,Ю,И,Э]
test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], test, false)
alert(test);//буквы которые есть хотябы в одном слове [А,Я,О,Ы,Е]
Последний раз редактировалось рони, 02.06.2015 в 01:51.
|
|
02.06.2015, 01:11
|
Новичок на форуме
|
|
Регистрация: 26.04.2015
Сообщений: 7
|
|
Сообщение от рони
|
HelloDarkness,
function blender(letters, words, select) {
return letters.filter(function(letter) {
return words.every(function(word) {
return word.toLowerCase().indexOf(letter.toLowerCase()) != -1 ? select : !select
})
})
};
var test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], true)
alert(test);//буквы которые входят в каждое слово [O]
test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], false)
alert(test);//буквы которых нет в каждом слове [Ё,У,Ю,И,Э]
|
фантастика, спасибо!
только функция мне не много не понятна, что в ней нужно будет изменить да бы применить к оставшимся двух условиям?
-буквы которые входят/ не входят хотя бы в одно слово
-буквы которые входят/ не входят только в одно слово
тест:
function blender(letters, words, select) {
return letters.filter(function(letter) {
return words.some(function(word) {
return word.toLowerCase().indexOf(letter.toLowerCase()) != -1 ? select : !select
})
})
};
var test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], true)
alert(test);//буквы которые входят в каждое слово [O]
test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], false)
alert(test);//буквы которых нет в каждом слове [Ё,У,Ю,И,Э]
Последний раз редактировалось HelloDarkness, 02.06.2015 в 01:49.
|
|
02.06.2015, 01:52
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
HelloDarkness,
есть буквы которых нет [Ё,У,Ю,И,Э] ни в одном слове -- значит остались буквы которые есть хотябы в одном слове.
смотрите пример выше - добавлено строки 12-13
|
|
02.06.2015, 02:16
|
Новичок на форуме
|
|
Регистрация: 26.04.2015
Сообщений: 7
|
|
Сообщение от рони
|
HelloDarkness,
есть буквы которых нет [Ё,У,Ю,И,Э] ни в одном слове -- значит остались буквы которые есть хотябы в одном слове.
смотрите пример выше - добавлено строки 12-13
|
логично с этим пунктом я вроде бы разобрался с помощью смены метода с every на some в третей строке вашего кода.
Подскажите лучше по-поводу последнего пункта:
-Все гласные буквы, которые входят только в одно слово.
Как отфильтровать допустим только первый(0) элемент массива, а не весь массив?
Последний раз редактировалось HelloDarkness, 02.06.2015 в 02:27.
|
|
02.06.2015, 02:35
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
HelloDarkness,
наверно так вам будет проще
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<script>
function blender(letters, words, select) {
return letters.filter(function(letter) {
var num = words.reduce(function(sum, word) {
word.toLowerCase().indexOf(letter.toLowerCase()) != -1 && sum++
return sum
},0)
return select(num)
})
};
var test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], function(num) {
return num == 4 //это длина массива слов
})
alert(test);//буквы которые входят в каждое слово [O]
test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], function(num) {
return num == 0
})
alert(test);//буквы которых нет в каждом слове [Ё,У,Ю,И,Э]
test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], function(num) {
return num > 0
})
alert(test);//буквы которые есть хотябы в одном слове [А,Я,О,Ы,Е]
var test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], function(num) {
return num == 3
})
alert(test);//буквы которыx нет только в 1 слове []
</script>
</body>
</html>
|
|
02.06.2015, 08:35
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,105
|
|
Сообщение от HelloDarkness
|
Как отфильтровать допустим только первый(0) элемент массива, а не весь массив?
|
так вместо ["которые", "входят", "каждое", "слово"] напишите ["которые"]
или [["которые", "входят", "каждое", "слово"] [0]]
|
|
02.06.2015, 10:38
|
Новичок на форуме
|
|
Регистрация: 26.04.2015
Сообщений: 7
|
|
Сообщение от рони
|
HelloDarkness,
наверно так вам будет проще
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<script>
function blender(letters, words, select) {
return letters.filter(function(letter) {
var num = words.reduce(function(sum, word) {
word.toLowerCase().indexOf(letter.toLowerCase()) != -1 && sum++
return sum
},0)
return select(num)
})
};
var test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], function(num) {
return num == 4 //это длина массива слов
})
alert(test);//буквы которые входят в каждое слово [O]
test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], function(num) {
return num == 0
})
alert(test);//буквы которых нет в каждом слове [Ё,У,Ю,И,Э]
test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], function(num) {
return num > 0
})
alert(test);//буквы которые есть хотябы в одном слове [А,Я,О,Ы,Е]
var test = blender(["А", "Я", "О", "Ё", "У", "Ю", "Ы", "И", "Э", "Е"], ["которые", "входят", "каждое", "слово"], function(num) {
return num == 3
})
alert(test);//буквы которыx нет только в 1 слове []
</script>
</body>
</html>
|
Не понял как это работает, но похоже он построен на том что мы заранее задаем в коде массив и его длину?
Мне же нужно что бы данные брались из текстового поля...
<input type="text" value="(слова которые введет пользователь, через запятую)" name ="ddata">
<script>
var array = document.ddata.value.split(', ")
</script>
то есть мы получаем массив, но мы не знаем заранее что это за массив и из скольких элементов он будет состоять...
|
|
|
|