Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сравнение элементов массивов (https://javascript.ru/forum/misc/48769-sravnenie-ehlementov-massivov.html)

nesfiraty 16.07.2014 11:05

Сравнение элементов массивов
 
Ребят такой вопрос есть два массива array1 = ["п","р","ы","в","е","т"] и второй array2 = ["п","р"]

необходимо первый элемент массива array2 сравнить с каждым элементом массива array1 как это реализуется?? Прошу не судить строго только начал изучать и пытаюсь писать свои функции))

skrudjmakdak 16.07.2014 11:36

<html>
	<head>
		<title>example</title>
	</head>
	<body>
		<script>
			//создаем массивы
			var array1 = ["п","р","ы","в","е","т"],
				array2 = ["п","р"];
			
			//у каждого массива есть очень важное свойство - это длинна массива. чтобы ее узнать
			//необходимо прописать имя_массива.length т.е. array1.length
			
			//попробуем вывести длинну в консоль
			console.log(array1.length);
			console.log(array2.length);
			
			//здесь будем хранить значение элемента
			var cache;
			
			//сохраним длины массивов:
			var ln1 = array1.length
				ln2 = array2.length;
			
			//теперь делаем цикл
			for (var i = 0; i < ln1; ++i)
				{
				cache = array1[i];
				
				for (var j = 0; j < ln2; ++j)
					{
					if (cache == array2[j])
						{
						console.log('найдено совпадение: ' + cache);
						break;
						}
					}
				}
		</script>
	</body>
</html>

nesfiraty 16.07.2014 11:41

спасибо попробую применить ))

nesfiraty 16.07.2014 11:53

проблема в том что я начинающий и мне пока трудно ориентироваться в циклах и прочих нюансах)) они пока не очевидны для меня хотя теоретически их освоил))) но думаю со временем мозг окрепнет и рука набъется)))

nesfiraty 16.07.2014 12:12

подскажи пожалуйста как правильно определять когда нужно использовать префиксную а когда постфиксную запись инкремента?? я с их теоретической основой знаком но на практике никак не пойму)) они ж блин работают практически одинаково))

Sweet 16.07.2014 12:27

Цитата:

Сообщение от nesfiraty
как правильно определять когда нужно использовать префиксную а когда постфиксную запись инкремента?? я с их теоретической основой знаком но на практике никак не пойму))

Этот выбор определяет поведение, которое требуется:) Иногда, как например, в цикле for, это не имеет значения. Хотя я чаще вижу (и сам привык) к постфиксной записи. А вот пример, где это важно:
var array = ["a", "b"];
var index = array.length;

// выведет только "b", потому что нужно, чтобы в условие
// предыдущее значение. Надо использовать index--.
while (--index) alert( array[index] );

nesfiraty 16.07.2014 12:57

спасибо))) ох блин как все не просто)))

Sweet 16.07.2014 13:13

Цитата:

Сообщение от nesfiraty
мне пока трудно ориентироваться в циклах и прочих нюансах)) они пока не очевидны для меня)))

На мой взгляд, циклы в принципе неочевидны. Да без них можно и обойтись. Я считаю, более правильным не хреначить всё за раз кучей циклов, а разбивать задачу на кусочки. Допустим, нужно проверять, входит ли массив в другой массив. Сравнение массивов можно вынести отдельно. Опять же, вдруг ещё где пригодится. И получается:
function isEqual(a, b) {
  return a.length == b.length && a.every(isEqual, b);
  
  function isEqual(value, index) {
    return value === this[index];
  }
};

function contains(a, b) {
  return a.length >= b.length && a.some(contains, b);
  
  function contains(value, index, array) {
    var slice = array.slice(index, index + this.length);
    return isEqual(slice, this);
  }
};


var array1 = ["п","р","ы","в","е","т"],
    array2 = ["п","р"];
    
alert( contains(array1, array2) );

На практике, лично мне, почти всегда, для манипуляций с массивами, хватает стандартных методов forEach, map, filter, indexOf, reduce.

рони 16.07.2014 17:57

:write:
var array1 = ["п", "р", "ы", "в", "е", "т"],
    array2 = ["п", "р"]
alert(array1.map(function (el) {
    return el == array2[0]
}));

nerv_ 16.07.2014 19:03

Цитата:

Сообщение от Sweet
Я считаю, более правильным не хреначить всё за раз кучей циклов, а разбивать задачу на кусочки. Допустим, нужно проверять, входит ли массив в другой массив. Сравнение массивов можно вынести отдельно. Опять же, вдруг ещё где пригодится. И получается

sugarjs или lowdash. Я использую первое.

kobezzza 16.07.2014 19:18

Цитата:

Сообщение от nerv_ (Сообщение 321356)
sugarjs или lowdash. Я использую первое.

https://github.com/kobezzza/Collection :)

nesta_dima 13.01.2015 16:08

Ребят подскажите, нужно удалить из символьного массива все знаки пунктуации.
window.onload=function(){
var s = "T $ # d @ e f g &"; //исходная строка
var ss = s.split(" "); //разделяю по символу в массив ss  
var mas=[]; //новый массив для переноса после редактирования
var k=0; //счетчик
var a=['#','$','@','&']; //что нужно заменить,знаки пунктуации
for (var i=0; i<ss.length;i++){// использую 2 массива
for (var j=0; j<a.length;j++){
if (ss[i]!=a[j]){ // если символ не совпадает с пунктуацией 
 mas[k]=ss[i]; //записываем в массив
 k++;  /
}}
}
alert(mas); // по моей логике должно выдать "Tdefg" но мне не выдает ничего.
}

рони 13.01.2015 16:23

nesta_dima,
11 строка ??? и для вашей задачи циклы ненужны
<script>
var s = "T $ # d @ e f g &"; //исходная строка
var ss = s.split(/[#$@&\s]+/).join('');
alert(ss)
</script>

nesta_dima 13.01.2015 16:57

рони нужен массив
 
По заданию символьный массив

рони 13.01.2015 17:07

Цитата:

Сообщение от nesta_dima
По заданию символьный массив

и ???

nesta_dima 13.01.2015 17:14

ДА верно. Подскажи а как удалить элементы, расположенные между максимумом и минимумом массива, если поменять T $ # d @ e f g & на 5 2 1 5 6 2 55.2 1
1)Находим max i min, запоминаем позиции и копируем в новый массив?

рони 13.01.2015 17:19

nesta_dima,
и что будет минимумом первая единица или вторая

nesta_dima 13.01.2015 17:21

Первую единицу будем считать за min

рони 13.01.2015 17:42

nesta_dima, наверняка есть и другие варианты
<script>
   var str = "5 2 1 5 6 2 55.2 1";
   var arr = str.split(' ');
   var min  =  Math.min.apply(Math, arr);
   var max = Math.max.apply(Math, arr);
   var reg = RegExp(min + " .*? " + max);
   str = str.replace(reg, min + " " + max);
   alert(str)
</script>

nesta_dima 13.01.2015 18:38

не работает с точкой
 
можешь пояснить .*? функцию replace в твоем контексте

рони 13.01.2015 19:23

Цитата:

Сообщение от nesta_dima
.*?

находит минимальное количество любых(почти) символов - в данном случае между минимумом и максимум (вначале и конце ещё пробелы) -- заменяем на пробел
Цитата:

Сообщение от рони
min + " " + max



Часовой пояс GMT +3, время: 08:27.