массив.splice
подскажите, как вставить в массив элемент? hfdysq 0
|
1. Отформатируй код: есть тэг JS
2. Объекты передаются по ссылке а не по значению. То есть если ты напишешь Arr2 = Arr1 а потом изменишь Arr2 то Arr1 у тебя тоже поменяется. http://learn.javascript.ru/object 3. Если научишься пользоваться отладчиком, то твои вопросы станут куда более конкретны http://learn.javascript.ru/debugging-chrome Если ты это писала сама, тебе хватит) Впрочем я в этом сомневаюсь сильно) |
спасибо за советы, пыталась писать сама, на определенном этапе не понимаю как сделать проверку if на отрицательные элементы массива
|
Да так и делать, только я бы на всякий случай к одному типу привел во избежание.
Пройдись отладчиком просто, посмотри где оно ведет себя не так как ты планируешь, а потом думай почему |
отладчик просто зависает в определенном месте
вы имеете ввиду if (Arr2[i] <== 0) { Arr2.splice(i<=0, 0, 0); } |
1. Почитай про splice. Ты какую-то фигню пытаешься сделать
http://javascript.ru/array/splice 2. А нужен ли тебе splice если исходный и результирующий массив могут быть разными? 3. Отладчик останавливается там где ты ему говоришь. Там где остановился можно посмотреть значения переменных чтобы понять что пошло не так, а потом двигать дальше |
Цитата:
function Array1(A) { var n = A.length; for (var i = 0; i < n; i++) { if (A[i] < 0) { for (var j = n-1; j >= i; j--) A[j+1] = A[j]; A[i+1] = 0; i++; n++; } } return A; } alert( Array1([-1,1,2,-6,7,1,6,-7]) ); |
Спасибо большое!
|
Цитата:
function Array2(A) { var n = A.length, B = []; for (var i = 0, j = 0; i < n; i++) { if (A[i] < 0) { B[j++] = A[i]; B[j++] = 0; } else B[j++] = A[i]; } return B; } alert( Array2([-1,1,2,-6,7,1,6,-7]) ); |
Цитата:
function isSymmArray(A) { var n = A.length, k = Math.floor(n/2); for (var i = 0; i < k; i++) { if (A[i] !== A[n-1-i]) return false; } return true; } |
Да, нужно было сохранять первоначальный массив, спасибо за помощь!
|
Цитата:
function nummax(Arr) { var n = Arr.length, max = Arr[0], count = 1; for (var i = 1; i < n; i++) { if (Arr[i] > max) { max = Arr[i]; count = 1; } else { if (Arr[i] == max) count++; } } return [max,count]; } // Пример вызова функции var A = nummax([-1,7,2,-6,7,1,7,-7,4,5]); alert("Максимальное значение массива: " + A[0] + ", его количество: " + A[1]); |
Спасибо Вам большое! Приятно, что есть такие отзывчивые люди!
|
Цитата:
function get_array_from_user() { var ret = []; // то, что будем возвращать var err = ""; // будем хранить ошибку для показа пользователю var str = ""; // объявляем строку while(str.indexOf('!') < 0) { // пока в ответе пользователя нет "!". Если строка "20!", то 20 будет добавлен в массив и цикл завершится str = prompt((err?err + '\n\n' : '') + //если есть ошибка, показываем её "Введите элемент массива, завершение ввода - символ '!':"); err = ''; // обнуляем ошибку var num = parseInt(str); // тут обрабатываем ошибки if(str === null) { // если нажата отмена. По идее лучше бы завершить ввод, но мы ждём "!". // Eсли хотите завершить, замените "continue" на "break" err = 'Ошибка: Вы отменили ввод!'; // записываем ошибку str = ''; // иначе у null нет свойства indexOf и скрипт авершится с ошибкой без результатов. continue; // обрываем "круг" цикла. } else if(!str) { // если пользователь ничего не ввёл err = 'Ошибка: Вы ничего не ввели!'; // записываем ошибку continue; // обрываем "круг" цикла. } else if(isNaN(num)) { //если не число err = 'Ошибка: "' + str + '" не является числом!'; // записываем ошибку continue; // обрываем "круг" цикла. } ret.push(num); // если всё нормально, то записываем в массив } return ret; } // демонстрация: var user_array = get_array_from_user(); // записываем в user_array то, что вернёт наша функция alert('Пользователь ввёл: ' + user_array); |
Подскажите, почему в конце не выводится document.write?
|
Anna77,
Я вообще не уверен как у вас это работает. У вас "break;" вынесен за пределы if'a. А после него фигурные скобки. Вы толи else хотели там, толи другой if И не понятно что вообще делает надпись "Массив симметричный" в цикле проверки. Только после окончания проверки мы может сказать симметричен массив, или нет. Видимо вы хотели вот так var Arr = []; var i = 0; do { var str = prompt("Введите элемент массива, завершение ввода - символ '!':"); if (!isNaN(+str) && +str == parseInt(str)) { Arr[i++] = str; } } while(str !== "!") document.write("Исходный массив Arr: " + Arr + "<br/>"); var x = true; var n = Arr.length; for (var i = 0; i < (n-1)/2; i++) { if (Arr[i] !== Arr[n-1-i]) { x = false; break; } } if(x) { document.write("Массив симметричный"); }else{ document.write("Массив несимметричный"); } |
Цитата:
Цитата:
var Arr = [], i = 0; do { var str = prompt("Введите элемент массива, завершение ввода - символ '!':"); if (!isNaN(+str) && +str == parseInt(str)) Arr[i++] = str; } while (str !== "!"); document.write("Исходный массив: Arr = [" + Arr + "]<br/>"); var x = "симметричный", n = Arr.length, k = (n%2==1) ? n/2 : (n-1)/2; for (var i = 0; i < k; i++) { if (Arr[i] !== Arr[n-1-i]) { x = "несимметричный"; break; } } document.write("Массив " + x); |
Anna77,
В общем вот вам готовый результат. Симметричность проверяется другим "необычным" способом. Всё прокомментировал, изучайте. function get_array_from_user() { // функция получения массива пользователя var ret = []; // то, что будем возвращать var err = ""; // будем хранить ошибку для показа пользователю var str = ""; // объявляем строку while(str.indexOf('!') < 0) { // пока в ответе пользователя нет "!". Если строка "20!", то 20 будет добавлен в массив и цикл завершится str = prompt((err?err + '\n\n' : '') + //если есть ошибка, показываем её "Введите элемент массива, завершение ввода - символ '!':"); err = ''; // обнуляем ошибку var num = parseInt(str); // тут обрабатываем ошибки if(str === null) { // если нажата отмена. По идее лучше бы завершить ввод, но мы ждём "!" // Eсли хотите завершить, замените "continue" на "break" err = 'Ошибка: Вы отменили ввод!'; // записываем ошибку str = ''; // иначе у null нет свойства indexOf и скрипт авершится с ошибкой без результатов. continue; // обрываем "круг" цикла } else if(!str) { // если пользователь ничего не ввёл err = 'Ошибка: Вы ничего не ввели!'; // записываем ошибку continue; // обрываем "круг" цикла } else if(isNaN(num)) { //если не число err = 'Ошибка: "' + str + '" не является числом!'; // записываем ошибку continue; // обрываем "круг" цикла } ret.push(num); // если всё нормально, то записываем в массив } return ret; } function is_symmetrical(arr) { // функция проверки симметричности var len = arr.length; // получаем длину массива if(len <= 1) return false; // если в массиве меньше 2 элементов, нам проверять нечего var to = Math.floor(len/2); // получаем половину длины var arr_1 = arr.slice(0, to).reverse(); // отрезаем первую половину от массива и разворачиваем его наоборот. Был 123 станет 321 if(len%2) to++; // если длина не кратна двум, то пропускаем средний элемент var arr_2 = arr.slice(to); // отрезаем вторую половину return !(arr_1<arr_2 || arr_2<arr_1); // возвращаем результат проверки } //демо var user_arr = get_array_from_user(); // получаем массив пользователя var symmetrical = is_symmetrical(user_arr); // проверяем симметричность alert('Пользователь ввёл: ' + user_arr + '\nМассив симметричен: ' + (symmetrical?'Да':'Нет')); // выводим результат |
Спасибо огромное!!!:thanks:
|
Благодарю за ценную и исчерпывающую информацию!!!Четко и доступно!
|
Спасибо! Теперь все работает!
|
Спасибо!
|
Часовой пояс GMT +3, время: 22:43. |