#javascript #arrays
#javascript #массивы
Вопрос:
Я нашел несколько других похожих вопросов, с которыми я пытался работать, но моя проблема, похоже, немного отличается.
Мне нужно удалить параметры / значения из переменной имен на основе других входных данных, однако у меня возникают проблемы с удалением определенных параметров / значений, потому что они на самом деле не совпадают.
Из-за способа импорта данных в код (не могу изменить это прямо сейчас), дополнительные числа и текст могут быть добавлены в конец имен в getRandomName5(). Мне нужен код, чтобы распознать RED и RED1 как одно и то же и найти уникальное значение для input_5, которое не соответствует значениям других входных данных.
Я могу заставить его работать, если getRandomName5() содержит те же значения, что и другие, но не похожие.
Могу ли я установить RED и RED1 как одно значение, чтобы они считались равными?
Спасибо за помощь
РЕДАКТИРОВАТЬ — Я попытаюсь быть более конкретным.
Я заполняю таблицу HTML и строки кода, которые являются «именами». Итак, поскольку коды / имена перечислены с номерами, они не совсем совпадают.
Например: я хотел бы, чтобы эти две случайно выбранные строки кода были распознаны как одинаковые.
<td>1</td><td>JIM</td><td>JOHNSON</td>
<td>5</td><td>JIM</td><td>JOHNSON</td>
function getRandomName1() {
var names = ['RED', 'GREEN', 'BLUE'];
return names[Math.floor(Math.random() * names.length)];
}
function getRandomName2() {
var names = ['BLACK', 'WHITE', 'GRAY'];
return names[Math.floor(Math.random() * names.length)];
}
function getRandomName3() {
var names = ['GOLD', 'SILVER', 'BRONZE'];
return names[Math.floor(Math.random() * names.length)];
}
function getRandomName4() {
var names = ['MAGENTA', 'CYAN', 'YELLOW'];
return names[Math.floor(Math.random() * names.length)];
}
function getRandomName5() {
var names = ['RED1', 'GREEN1', 'BLUE1', 'BLACK1', 'WHITE1', 'GRAY1', 'GOLD1', 'SILVER1', 'BRONZE1', 'MAGENTA1', 'CYAN1', 'YELLOW1'];
return names[Math.floor(Math.random() * names.length)];
}
function myFunction1() {
if (document.getElementById("input_A").value == "1") {
document.getElementById("input_1").value = (getRandomName1());
document.getElementById("input_2").value = (getRandomName2());
document.getElementById("input_3").value = (getRandomName3());
document.getElementById("input_4").value = (getRandomName4());
document.getElementById("input_5").value = (getRandomName5());
}
}
<body onload="myFunction1()">
<select id="input_A">
<option value="1"> 1 </option>
<option value="2"> 2 </option>
<option value="3"> 3 </option>
<option value="4"> 4 </option>
<option value="5"> 5 </option>
</select><br>
<input type="text" id="input_1"><br>
<input type="text" id="input_2"><br>
<input type="text" id="input_3"><br>
<input type="text" id="input_4"><br>
<input type="text" id="input_5">
</body>
Комментарии:
1. Таким образом, вы говорите, что вы не можете изменить фактический код
getRandomName5
? Тогда вы также не сможете ничего изменить в локальной переменной, содержащейся внутри этой функции; тогда, вероятно, ваш единственный вариант — продолжать вызывать эту функцию, пока вы не получите значение, которое уже не содержится ни в одном из других полей ввода.2. Насколько сложным это будет, зависит от того, каковы ваши критерии для подобных. Вам нужно это определить.
3. может использоваться
str.match()
4. Я могу изменить код, я не могу изменить имена, которые импортируются в код. @AluanHaddad Я не могу создавать списки имен, которые считаю похожими? Не существует критериев, которые бы работали, это просто то, как я их группирую
5. Почему вы создаете одну и ту же функцию 5 раз? вы не можете просто создать
getRandomName
функцию и передать имена в качестве параметра?
Ответ №1:
Что вам нужно будет сделать, так это выполнить итерацию по вашим предыдущим входным данным и удалить из этого массива имен в функции любые, которые содержат значение (color)
и (color) "1"
. Вы также можете сделать !arrayItem.includes(color)
, если хотите быть более общим
function getRandomName1() {
var names = ['RED', 'GREEN', 'BLUE'];
return names[Math.floor(Math.random() * names.length)];
}
function getRandomName2() {
var names = ['BLACK', 'WHITE', 'GRAY'];
return names[Math.floor(Math.random() * names.length)];
}
function getRandomName3() {
var names = ['GOLD', 'SILVER', 'BRONZE'];
return names[Math.floor(Math.random() * names.length)];
}
function getRandomName4() {
var names = ['MAGENTA', 'CYAN', 'YELLOW'];
return names[Math.floor(Math.random() * names.length)];
}
function getRandomName5() {
var names = ['RED1', 'GREEN1', 'BLUE1', 'BLACK1', 'WHITE1', 'GRAY1', 'GOLD1', 'SILVER1', 'BRONZE1', 'MAGENTA1', 'CYAN1', 'YELLOW1'];
// Go though the input_1 to input_4 elements and get their value
for(var i = 1; i < 5; i ) {
color = document.getElementById("input_" i).value
// Go through our names array, if it contains that color or it with a
// 1 at the end then remove it from names
names = names.filter(c => c !== color "1" amp;amp; c !== color)
}
// Now with the colors removed this is be unquie compared to the last inputs
return names[Math.floor(Math.random() * names.length)];
}
function myFunction1() {
if (document.getElementById("input_A").value == "1") {
document.getElementById("input_1").value = (getRandomName1());
document.getElementById("input_2").value = (getRandomName2());
document.getElementById("input_3").value = (getRandomName3());
document.getElementById("input_4").value = (getRandomName4());
document.getElementById("input_5").value = (getRandomName5());
}
}
<body onload="myFunction1()">
<select id="input_A">
<option value="1"> 1 </option>
<option value="2"> 2 </option>
<option value="3"> 3 </option>
<option value="4"> 4 </option>
<option value="5"> 5 </option>
</select><br>
<input type="text" id="input_1"><br>
<input type="text" id="input_2"><br>
<input type="text" id="input_3"><br>
<input type="text" id="input_4"><br>
<input type="text" id="input_5">
</body>
Комментарии:
1. Спасибо. Это выглядит хорошо, и я попытаюсь заставить его работать с тем, что мне нужно. Я должен был быть более прямым в своей проблеме, но я пытался не публиковать много кода
2. @JimB Нет проблем, если это ответ на ваш вопрос, вы можете принять его, щелкнув зеленую галочку слева от него. Хотя ваш первоначальный вопрос показался мне достаточно ясным, и это не слишком много кода для вопроса.
3. Я предполагаю, что проблема, с которой я сталкиваюсь сейчас, заключается в том, что в первых 4 цветах тоже есть дополнительные цифры, поэтому я думаю, что мне нужно удалить эти цифры, используя аналогичный код, который находится в 5?
4. @JimB Вы можете сделать
color = color.replace(/d $/g, "")
, чтобы удалить все дополнительные числа в конце строки, чтобы цифры в конце были удалены, и она просто получит название цвета.5. Я не смог заставить замену работать. Все это закрыто, отфильтровывание разных / уникальных частей каждого списка имен должно работать так, как они будут соответствовать