#javascript #arrays
#javascript #массивы
Вопрос:
Я ищу способ соединить два массива вместе, вроде как. У меня есть два массива, и я хочу, чтобы их элементы были своего рода «объединены».
Итак, допустим, у меня есть сканер. Это дает мне значение для каждого элемента в array1 (например, US $). Я хочу, чтобы он возвращал что-то (например, строку «этот продукт продается дешево!»), если это значение для каждого элемента меньше или равно значению в array2.
Я бы хотел, чтобы он только связывал один элемент в массиве с другим в той же позиции.
Два массива (кратко упомянутые выше):
var array1 = [741, 451, 54188, 5847, 5418, 54944, 310, 541, 7451, 10211, 113, 9115, 62, 2841, 52482481, 24];
var array2 = [15, 418, 488, 130000, 8482, 55, 16, 14, 2546, 651, 4521, 11, 54, 659, 542, 1152];
Таким образом, 741 будет связан с 15, 451 с 418, 54188 с 488 и т.д.
После того, как они были «связаны», я смог бы увидеть, является ли значение (по значению, я имею в виду то, что мой сканер находит для каждого из них) для элемента в array1 равным / меньшим, чем значение для этого элемента в array2.
Например, ввод 741 в мой сканер возвращает 16. Их не меньше 15, поэтому они ничего не вернут. — Однако ввод 451 в мой сканер возвращает 417. Это меньше, чем 418, поэтому он вернет «этот продукт продается дешево!»
Я надеюсь, что это имело смысл.
Комментарии:
1. @zerkms Я новичок в Javascript и не совсем понимаю .indexOf() . Не могли бы вы объяснить?
2. @user3810560 — Я бы посоветовал вам ознакомиться с MDN — linked here , где вы можете просмотреть любой метод javascript или любой тип объекта javascript, чтобы увидеть, какие методы у него есть.
.indexOf()
это довольно просто и полностью описано там . Если вы изучите хорошие справочные источники, то сможете самостоятельно найти ответы на гораздо больше вопросов.
Ответ №1:
Я бы вместо этого создал объект и поместил его в один массив.
var my Obj = {no1:741, no2:15, text:'some text'}
Это позволило бы вам создать массив без использования сканера, поскольку он уже сохранен в состоянии «отсканировано»
Ответ №2:
Вот простое решение, которое просто использует .indexOf()
для поиска кода продукта в первом массиве, а затем использует этот индекс для поиска сравнительной цены во втором массиве:
Product Number: <input id="testVal" type="text" value="741"><br>
Test Price: <input id="priceVal" type="text" value=15><br>
<button id="go">Lookup</button><br><br>
<div id="result"></div>
document.getElementById("go").addEventListener("click", function() {
var prod = document.getElementById("testVal").value;
var price = document.getElementById("priceVal").value;
var result = lookupValue(prod, price);
document.getElementById("result").innerHTML = resu<
});
function lookupValue(prod, price) {
var productCodes = [741, 451, 54188, 5847, 5418, 54944, 310, 541, 7451, 10211, 113, 9115, 62, 2841, 52482481, 24];
var prices = [15, 418, 488, 130000, 8482, 55, 16, 14, 2546, 651, 4521, 11, 54, 659, 542, 1152];
var index;
if (!prod || !price) {
return "Please Enter a Product Number and Price";
}
if ((index = productCodes.indexOf(prod)) >= 0) {
if (index < prices.length amp;amp; price < prices[index]) {
return "This product is selling for cheap!";
} else {
return "This product is not a bargain.";
}
} else {
return "Product not found for comparison";
}
}
Рабочая демонстрация: http://jsfiddle.net/jfriend00/4S64t /.
При таком количестве кодов продуктов действительно нет проблем с простым использованием .indexOf()
для поиска соответствия в первом массиве. Но, если бы у вас было много кодов продуктов, то было бы намного быстрее проиндексировать их один раз в объект для прямого поиска.
Ответ №3:
Вы могли бы использовать объект javascript, который работает как словарь (или hashmap)
var myObj = {};
array1.forEach(function(item, i) {
myObj[item] = array2[i];
});
alert(myObj[741]);
>>> 15
При таком расположении массив1 содержит keys
, а массив 2 содержит values
ваш словарь.