Возврат строки из параллельного массива

#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. Спасибо, это ЗДОРОВО 🙂 проблема заключалась в том, что я не инициализировал новое слово — и теперь я могу протестировать его должным образом. Исси 🙂