15.05.2013, 02:28
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Сообщение от рони
|
function findElem(A,Arr)
{
var i=Arr.length;
while (--i&&Arr[i]!=A) ;
alert(i<0?'Not found':i);
}
var Arr = [1, 2, 3, 4, 5, 6, 7, 8, 19, 9, 16, 15, 65, 0];
findElem(9,Arr)
|
Неверно
Вместо 'Not found' будет 0.
|
|
15.05.2013, 02:34
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Сообщение от Demath
|
Вместо 'Not found' будет 0.
|
пример можно? где функция покажет неверный ответ???
|
|
15.05.2013, 02:37
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Например
<script>
function findElem(A,Arr)
{
var i=Arr.length;
while (--i&&Arr[i]!=A) ;
alert(i<0?'Not found':i);
}
</script>
<button onclick="findElem(-5,[1, 2, 3, 4, 5, 6, 7, 8, 19, 9, 16, 15, 65, 0])">Пример</button>
Всегда будет 0, когда элемента нет в массиве.
|
|
15.05.2013, 02:57
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Demath,
ок!
function findElem(A,Arr)
{
var i=Arr.length;
while (i--&&Arr[i]!=A) ;
alert(i<0?'Not found':i);
}
findElem(-5,[1, 2, 3, 4, 5, 6, 7, 8, 19, 9, 16, 15, 65, 0])
|
|
15.05.2013, 03:05
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Сообщение от Konstan_G
|
Всем привет! Я чайник в JS помогите разобраться с задачами.
Задача №2
Реализовать алгоритм. Дано два массива чисел с индексами от 0 до N, необходимо вывести на экран все числа которые одновременно присутствуют в обоих массивах.
|
Например, так (учитываются повторяющиеся элементы)
<script type="text/javascript">
function getIntersection(A,B)
{
A.sort(function(a,b){return a-b;}); //Сортировка А и B по возрастанию.
B.sort(function(a,b){return a-b;});
var a0=A[0], b0=B[0], k1=1, k2=1;
for (var i=1; i<A.length; i++) //Удаление повторяющихся элементов
{ if (A[i]!=a0){ A[k1++]=A[i]; a0=A[i]; } } // в сортированных массивах А и B.
A.length = k1;
for (var i=1; i<B.length; i++)
{ if (B[i]!=b0) { B[k2++]=B[i]; b0=B[i]; } }
B.length = k2;
var N = A.length, M = B.length, C = [];
for (var i=0, j=0, k=0, m=0; k<N+M; k++) //Слияние A и B в С с сохранением упорядоченности.
{ if (i==N){ C[k] = B[j++]; continue; }
if (j==M){ C[k] = A[i++]; continue; }
C[k] = (A[i]<B[j]) ? A[i++] : B[j++];
}
for (var i=1, j=0; i<C.length; i++)
{ if (C[i-1]==C[i]){ C[j++] = C[i-1]; } } //Удаление в C всех элементов,
C.length = j; // кроме дублирующих.
return C;
}
</script>
<button onclick="alert( getIntersection([-1,3,-4,5,2,6],[-1,0,8,1,2,9,3,-4,5,7]) )">Пример</button>
Последний раз редактировалось Demath, 19.05.2013 в 02:28.
Причина: опечатка
|
|
15.05.2013, 03:27
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
Вариант )))
function getIntersection(c, d) {
var a = {};
c.map(function (b) {
a[b] = !0
});
return a = d.filter(function (b) {
return a[b]
})
};
alert( getIntersection([-1,3,-4,5,2,6],[-1,0,8,1,2,9,3,-4,5,7]) )
|
|
15.05.2013, 04:01
|
Новичок на форуме
|
|
Регистрация: 14.05.2013
Сообщений: 4
|
|
Спасибо за помощь,
по логике - все должно работать,
результат пока не получил - добавил сами инпуты и кнопку с вызовом функции - выдает $ is not defined
...
input = $('#input1') ; // ваш input, куда нужно вставить model
function find() {
var depth = $('#depth').attr("value"),
width = $('#width').attr("value") ;
parts.some(function(x) {
if(x.width == width && x.depth == depth) {
input.val(x.model) ;
alert (input.val(x.model));
return true ;
} ;
}) ;
}
</script>
<input id="input1" name="input1" value="" type="text" />
<input id="depth" name="depth" value="60" type="text" />
<input id="width" name="width" value="24" type="text" />
<input name="submit" type="button" value="submit" onclick="find()" />
P.S. по идее можно ведь прописать инфу строкой - разбивая на массив по 3 элемента выяснять совпадение первых двух с заданными переменными и при совпадении присваивать значение 3го элемента инпуту... пойду почитаю как сплит работает.
P.P.S скрипт после доработки напильником отлично встроился на место и функционирует, Спасибо от души сообществу и лично Hekumok.
Последний раз редактировалось awoth, 15.05.2013 в 06:41.
|
|
15.05.2013, 08:34
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
nasqad,
Вариант не ловит повторы и ноль ....
function getIntersection(a, b) {
return a.filter(function (c) {
return b.indexOf(c) != -1 && c;
})
};
alert( getIntersection([0,-1,3,-4,5,2,6,3,3,3,3],[-1,0,8,1,2,9,3,-4,5,7,0]) )
function get(c, d) {
var a = {};
c.map(function (b) {
a[b] = !0
});
return a = d.filter(function (b) {
return a[b]? (a[b]=!1,!0):!1
})
};
alert( get([0,-1,3,-4,5,2,6,3,3,3,3],[-1,0,8,1,2,9,3,-4,5,7,0]) )
|
|
15.05.2013, 10:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
nasqad,
интересно повторы одновременно присутствуют во втором массиве в котором их нет ?
|
|
17.05.2013, 19:50
|
Новичок на форуме
|
|
Регистрация: 14.05.2013
Сообщений: 4
|
|
Цитата:
|
...
input = $('#input1') ; // ваш input, куда нужно вставить model
function find() {
var depth = $('#depth').attr("value"),
width = $('#width').attr("value") ;
parts.some(function(x) {
if(x.width == width && x.depth == depth) {
input.val(x.model) ;
alert (input.val(x.model));
return true ;
} ;
}) ;
}
</script>
<input id="input1" name="input1" value="" type="text" />
<input id="depth" name="depth" value="60" type="text" />
<input id="width" name="width" value="24" type="text" />
<input name="submit" type="button" value="submit" onclick="find()" />
|
Такой вопрос - функция some не поддоерживается ИЕ ниже 9ти,
Нашел вроде обьяснение как сделать аналог для ИЕ но применить не получается ( http://www.tutorialspoint.com/javascript/array_some.htm)
может кто помочь в данном вопросе?
Тестил варианты типа
if (!Array.prototype.some)
{
var bench=[{a:1, b:9}{a:2,b:11}];
Array.prototype.some = function(fun /*, thisp*/)
{
var len = this.length;
if (typeof fun != "function")
throw new TypeError();
var thisp = arguments[1];
for (var i = 0; i < len; i++)
{
if (i in this &&
fun.call(thisp, this[i], i, this))
return true;
}
return false;
};
}
function isBigEnough(element, index, array) {
return (element >= 10);
}
var retval = bench.some(isBigEnough);
document.write("Returned value is : " + retval );
не пашет 8(
|
|
|
|