Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.06.2015, 22:23
Новичок на форуме
Отправить личное сообщение для HelloDarkness Посмотреть профиль Найти все сообщения от HelloDarkness
 
Регистрация: 26.04.2015
Сообщений: 7

Найти совпадения в тексте
Здравствуйте форумчане, по заданию нужно создать текстовое поле и ввести в него слова через запятую, проанализировать его и вывести результаты по 6 критериям:
Все гласные буквы, которые входят в каждое слово
Все согласные буквы, которые не входят ни в одно слово

Все звонкие согласные буквы, которые входят хотя бы в одно слово
Все глухие согласные, которые не входят хотя бы в одно слово

Все согласные буквы, которые входят только в одно слово
Все глухие согласные буквы, которые не входят только в одно слово

Написано что нужно реализовать при помощи объекта Array и его методов.
Подскажите пожалуйста с помощью каких методов такое возможно реализовать... буду благодарен любой помощи.
Я знаю только один - split - с помощь его я превратил сроку текста в массив из слов, а что дальше делать хз...
Ответить с цитированием
  #2 (permalink)  
Старый 01.06.2015, 23:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от HelloDarkness
Все гласные буквы, которые входят в каждое слово
создать массив гласных букв -- отфильтровать по всем словам.
то есть кроме массива слов нужно 6 массивов для фильтрации.
можно циклом , можно http://learn.javascript.ru/array-iteration
вы начните.
Ответить с цитированием
  #3 (permalink)  
Старый 02.06.2015, 00:43
Новичок на форуме
Отправить личное сообщение для HelloDarkness Посмотреть профиль Найти все сообщения от HelloDarkness
 
Регистрация: 26.04.2015
Сообщений: 7

Сообщение от рони Посмотреть сообщение
создать массив гласных букв -- отфильтровать по всем словам.
то есть кроме массива слов нужно 6 массивов для фильтрации.
можно циклом , можно http://learn.javascript.ru/array-iteration
вы начните.
Спасибо, но, если я правильно понял, то нам хватит и четырех массивов:
- Гласных
- Согласных
- Звонких согласных
- Глухих согласных
т.к. согласные и глухие по заданию используются дважды

И я не понял как "отфильтровать по всем словам" допустим я имею 2 массива:
var array1 = [мать, отец, сын];
var array2 = [а, у, о, ы, и, э, я, ю, ё, е];
как мне с помощью второго отфильтровать первый по заданным условиям?

Последний раз редактировалось HelloDarkness, 02.06.2015 в 00:51.
Ответить с цитированием
  #4 (permalink)  
Старый 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.
Ответить с цитированием
  #5 (permalink)  
Старый 02.06.2015, 01:11
Новичок на форуме
Отправить личное сообщение для HelloDarkness Посмотреть профиль Найти все сообщения от HelloDarkness
 
Регистрация: 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.
Ответить с цитированием
  #6 (permalink)  
Старый 02.06.2015, 01:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

HelloDarkness,
есть буквы которых нет [Ё,У,Ю,И,Э] ни в одном слове -- значит остались буквы которые есть хотябы в одном слове.

смотрите пример выше - добавлено строки 12-13
Ответить с цитированием
  #7 (permalink)  
Старый 02.06.2015, 02:16
Новичок на форуме
Отправить личное сообщение для HelloDarkness Посмотреть профиль Найти все сообщения от HelloDarkness
 
Регистрация: 26.04.2015
Сообщений: 7

Сообщение от рони Посмотреть сообщение
HelloDarkness,
есть буквы которых нет [Ё,У,Ю,И,Э] ни в одном слове -- значит остались буквы которые есть хотябы в одном слове.

смотрите пример выше - добавлено строки 12-13
логично с этим пунктом я вроде бы разобрался с помощью смены метода с every на some в третей строке вашего кода.

Подскажите лучше по-поводу последнего пункта:
-Все гласные буквы, которые входят только в одно слово.
Как отфильтровать допустим только первый(0) элемент массива, а не весь массив?

Последний раз редактировалось HelloDarkness, 02.06.2015 в 02:27.
Ответить с цитированием
  #8 (permalink)  
Старый 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>
Ответить с цитированием
  #9 (permalink)  
Старый 02.06.2015, 08:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от HelloDarkness
Как отфильтровать допустим только первый(0) элемент массива, а не весь массив?
так вместо ["которые", "входят", "каждое", "слово"] напишите ["которые"]
или [["которые", "входят", "каждое", "слово"] [0]]
Ответить с цитированием
  #10 (permalink)  
Старый 02.06.2015, 10:38
Новичок на форуме
Отправить личное сообщение для HelloDarkness Посмотреть профиль Найти все сообщения от HelloDarkness
 
Регистрация: 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>
то есть мы получаем массив, но мы не знаем заранее что это за массив и из скольких элементов он будет состоять...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт выделяющий слова в тексте. Что я делаю не так Aleksey140569 Общие вопросы Javascript 7 23.05.2017 14:37
Найти фрагмент в тексте, и если его нет, то ... ozzee Общие вопросы Javascript 1 03.05.2015 16:35
Как найти совпадения в массиве и добавить их в двумерный массив? Armen Общие вопросы Javascript 4 23.04.2015 13:27
Найти совпадения из цифр в поле sql arahmanov Серверные языки и технологии 3 25.11.2013 10:59