配对多个javascript数组

时间:2014-09-23 14:22:46

标签: javascript arrays

我试图用多个javascript数组来解决问题。

所以基本上我想要的结果是将下拉框的数组与我将显示的其他数组中的其他值匹配。

数组包含不同的值,但顺序是最重要的


var array1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22];
var array2 = [30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50];
var array3 = [36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56];

让我们说用户选择数字4,然后我需要以某种方式选择array2中的32和array3中的38。

很高兴接受任何建议,谢谢!

4 个答案:

答案 0 :(得分:3)

  1. 使用Array.prototype.indexOf

    从第一个数组中获取索引
    var index = array1.indexOf(4);
    
  2. 从该索引获取其他数组的值,如此

    console.log(array2[index], array3[index]);
    
  3. 注意:如果在数组中找不到要搜索的值,indexOf将不会因错误而失败,但它只会返回-1。因此,您可能需要在使用它之前检查以访问其他数组中的元素,例如

    var index = array1.indexOf(4);
    if (index !== -1) {
        console.log(array2[index], array3[index]);
    } else {
        console.log("Invalid element selected");
    }
    

答案 1 :(得分:3)

任何时候你有多个并行数组,你应该考虑将它重构为一个对象数组。这样你就不必担心让它们保持同步。例如:

var myArray = [ { val1: 2, val2: 30, val3: 36 }, { val1: 4, val2: 32, val3: 38 }, ...];

现在要找到4的值,您可以简单地执行类似的操作(尽管简单的for循环可能更有效,因为您知道只有一个结果):

var myValues = myArray.filter(function(item) { return item.val1 === 4 });

然后访问myValues[0].val2myValues[0].val3

或者,如果您总是按第一个值查找,则可以将其用作映射到其他两个值的对象的键。类似的东西:

var myArray = { 2: { val2: 30, val3: 36 }, 4: { val2: 32, val3: 38 },...};

现在,如果您想要4的其他两个值,您可以简单地:

var value2 = myArray[4];
var value3 = myArray[4];

答案 2 :(得分:3)

假设这些不仅是数组和值,而且还有实际的<select>下拉框:

不仅可以使用select1.value来访问所选值,还可以使用select1.options[select1.selectedIndex].value。那个.selectedIndex是我们感兴趣的,你可以在其他两个下拉列表的选项集合或者带有它们值的数组上等效地使用它:

select2.options[select1.selectedIndex].value
array2[select1.selectedIndex]
select3.options[select1.selectedIndex].value
array3[select1.selectedIndex]

如果您通过options集合访问它们,则需要确保实际选择了一个选项(select1.selectedIndex != -1),否则您将获得例外。

答案 3 :(得分:0)

这样做,

var valueFromSelect = 4;


var array1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22];
var array2 = [30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50];
var array3 = [36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56];

for(var i = 0; i < array1.length; i++){
   if(valueFromSelect == array1[i]){
       console.log(array2[i], array3[i]);
       break;
   }
}

我建议您不要使用indexOf,它与IE不兼容&lt; 9阅读更多关于 here indexOf MDN

的信息