Соединение элементов в отдельные массивы

#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 ваш словарь.