#javascript #string #parallel-arrays
#javascript #строка #параллельные массивы
Вопрос:
Прошу прощения за вопрос новичка, но это сводит меня с ума.
У меня есть слово. Для каждой буквы слова определяется позиция символов в одном массиве, а затем возвращается символ в той же позиции, что и в параллельном массиве (базовый шифр). Это то, что у меня уже есть:
*array 1 is the array to search through*
*array 2 is the array to match the index positions*
var character
var position
var newWord
for(var position=0; position < array1.length; position = position 1)
{
character = array1.charAt(count); *finds each characters positions*
position= array1.indexOf(character); *index position of each character from the 1st array*
newWord = array2[position]; *returns matching characters from 2nd array*
}
document.write(othertext newWord); *returns new string*
Проблема, с которой я сталкиваюсь, заключается в том, что на данный момент функция записывает только последнюю букву нового слова. Я действительно хочу добавить больше текста в document.write, но если я помещу в цикл for, он будет записывать новое слово, но также и другой текст между каждым словом. Что я на самом деле хочу сделать, так это вернуть othertext newWord вместо document.write, чтобы я мог использовать его позже. (просто используя doc.write для ввода текста моего кода) 🙂
Я знаю, что это что-то действительно простое, но я не могу понять, где я ошибаюсь. Есть какие-нибудь советы? Спасибо, Исси
Комментарии:
1. Привет, Исси, добро пожаловать в SO. К сожалению, если большинство пользователей услышат вопросы в стиле «домашней работы», они вряд ли ответят. Кроме того, на каком языке это написано?
2. Привет, Стив, спасибо за твой ответ, да, я знаю, что это довольно сложно, я действительно хочу разобраться с этим сам, но мне просто нужна точка в правильном направлении, поскольку я полностью застрял в вопросе, куда идти. это на JavaScript. Спасибо, Исси
Ответ №1:
Решение заключается в сборке newWord
внутри цикла с использованием =
вместо =
. Просто установите его в пустую строку перед циклом.
С этим кодом есть и другие проблемы. Переменная count
никогда не инициализируется. Но давайте предположим, что циклы должны использовать count
вместо position
в качестве основного счетчика. В таком случае, если я не ошибаюсь, этот цикл будет просто генерироваться array2
как newWord
. Первые две строки тела цикла, проще говоря, отменяют друг друга и position
всегда будут равны count
, поэтому буквы из array2
будут использоваться последовательно от начала до конца.
Не могли бы вы привести один пример ввода и желаемого результата, чтобы мы поняли, чего вы на самом деле хотите достичь?
Комментарии:
1. Привет, да, извините, это должно быть количество, а не позиция. У меня есть 2 массива, в одном из которых ‘a, b, c, d, e, f, g, h, а в другом ‘d, e, f, g, h, a, b, c’. Моим словом мог бы быть ‘ace’. Это слово будет найдено в первом массиве, чтобы получить их индексные номера, затем оно будет использовать эти индексные номера для поиска во втором массиве и вернет строку ‘deh’ . Приведенный выше пример (когда я использую правильное слово цикла 😉 ) действительно записывает строку, но только потому, что она находится внутри цикла — мне нужно заставить ее записать ее вне цикла. Я уловил какой-то смысл?, извините за бессвязность
2. Разве возвращаемая строка на самом деле не должна быть ‘dfh’? Кроме того, в вашем коде нет упоминания о входной строке. Я полагаю, что в первой строке тела цикла должно быть
oldWord
вместоarray1
. И, как я уже сказал, решение заключается в использовании = вместо = в третьей строке.
Ответ №2:
Хороший способ структурирования вашего кода и вашего вопроса заключается в том, что вы определяете function
, который вам нужно реализовать. В вашем случае это может выглядеть следующим образом:
function transcode(sourceAlphabet, destinationAlphabet, s) {
var newWord = "";
// TODO: write some code
return newWord;
}
Таким образом, вы четко указываете, что вы хотите и какие параметры задействованы. Также легко написать автоматические тесты позже, например:
function testTranscode(sourceAlphabet, destinationAlphabet, s, expected) {
var actual = transcode(sourceAlphabet, destinationAlphabet, s);
if (actual !== expected) {
document.writeln('<p class="error">FAIL: expected "' expected '", got "' actual '".</p>');
} else {
document.writeln('<p class="ok">OK: "' actual '".');
}
}
function test() {
testTranscode('abcdefgh', 'defghabc', 'ace', 'dfh');
}
test();
Комментарии:
1. Спасибо, это ЗДОРОВО 🙂 проблема заключалась в том, что я не инициализировал новое слово — и теперь я могу протестировать его должным образом. Исси 🙂