23.12.2013, 13:55
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от danik.js
|
А что по твоему означает "второй массив" - часть первого?
|
Это обычное понятие "быть частью чего-либо"... Т.е. это не какое-то мое понятие... Это понятие вообще.
Например в первом массиве нет двух 2, как и двух 4... Т.о. второй массив ну никак не может быть частью первого.
|
|
23.12.2013, 13:56
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от danik.js
|
Именно так функция и работает - игнорирует порядок и повторы.
|
Это-то понятно...
|
|
23.12.2013, 14:07
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
ksa, тогда предлагаю такой вариант:
Сначала отсортировать a2, далее при переборе хранить найденный индекс совпадающего элемента в a1, сверять текущий элемент с предыдущим элементом, и если они равны, то искать дубль уже с сохраненного индекса, а не с начала.
__________________
В личку только с интересными предложениями
|
|
23.12.2013, 14:08
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
var a1 = [1, 2, 3, 4, 5];
var a2 = [2, 4, 4, 2];
var buf = {},
rez = false,
i;
for (i = 0; i < a2.length; i++) {
buf[a2[i]] = true;
}
for (i = 0; i < a1.length; i++) {
if (buf[a1[i]]) {
rez = true;
break;
}
}
alert(rez);
то же самое Определение длинны строки
|
|
23.12.2013, 14:08
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от danik.js
|
тогда предлагаю такой вариант ...
|
Это пусть уже автор думает, что ему делать...
|
|
23.12.2013, 14:11
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от Poznakomlus
|
var a1 = [1, 2, 3, 4, 5];
var a2 = [2, 4, 4, 2];
var buf = {},
rez = false,
i;
for (i = 0; i < a2.length; i++) {
buf[a2[i]] = true;
}
for (i = 0; i < a1.length; i++) {
if (buf[a1[i]]) {
rez = true;
break;
}
}
alert(rez);
то же самое Определение длинны строки
|
Твой вариант не пройдет, по описаным выше причинам...
|
|
23.12.2013, 14:16
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от danik.js
|
Сначала отсортировать a2, далее при переборе хранить найденный индекс совпадающего элемента в a1, сверять текущий элемент с предыдущим элементом, и если они равны, то искать дубль уже с сохраненного индекса, а не с начала.
|
А как тебе такой вариант:
- переделать первый массив в объект (o[a[i]]=<количество_елементов>)
- пройтись по второму массиву проверяя и "минусуя" количество
- если проверка и декремент не выявил патологии - таки является частью.
Т.о. 1 проход по первому и 1 проход по второму - вроде не так уж и плохо получится...
|
|
23.12.2013, 14:26
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от Poznakomlus
|
мой пример является решением, этой задачи.
|
Нет.
Сообщение от Poznakomlus
|
Не кажется, что вы усложняете задачу не описанную Т.С.
|
Нет.
Т.к. массив
var a2 = [2, 4, 4, 2];
не является частью массива
var a1 = [1, 2, 3, 4, 5];
|
|
23.12.2013, 14:32
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
что вы считаете частью массива?
не нашел у Т. С. такого
a2 [2, 3] ?
a3 [3, 2] ?
a4 [3] ?
массива a1 = [1, 2, 3, 4, 5];
Последний раз редактировалось Vlasenko Fedor, 23.12.2013 в 14:36.
|
|
23.12.2013, 14:41
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,215
|
|
Сообщение от Poznakomlus
|
что вы считаете частью массива?
|
Дабы не повторяться...
Перебор массива - вложенный цикл
Сообщение от Poznakomlus
|
не нашел у Т. С. такого
|
Ну не нашел - так не нашел...
Вот мой вариант на проверку именно части одного массива в другом
var a1 = [1, 2, 3, 4, 5];
var a2 = [2, 4, 4, 2];
alert(part(a1,a2));
a2 = [2, 4];
alert(part(a1,a2));
function part(Ar1,Ar2) {
var o={};
for (var i=0; i<Ar1.length; i++) {
o[Ar1[i]]=(o[Ar1[i]]||0)+1;
};
for (i=0; i<Ar2.length; i++) {
if (o[Ar2[i]]) {
if (o[Ar2[i]]--==0) {
return false;
};
} else {
return false;
};
};
return true;
};
|
|
|
|