繁体   English   中英

Javascript-将所有数组值的索引存储在变量中

[英]Javascript - storing the index of all array values in a variable

假设我在JS中有一个数组:varfruits = [apple,orange,banana]我想将每个水果的索引存储在变量中,以便在任何时间点,如果我向数组中添加更多内容,我仍然会知道苹果的索引是X。所以在这种情况下,0是苹果,但是如果我在开头添加一些内容,苹果的索引就会改变。

我能想到的更冗长的方法是遍历数组

for (var i=0;i<fruits.length;i++) {
   switch(fruits[i]) {
    case:"apple"
      var indexApple = i;
      break;
    //etc 
   }
}

我可以想到的另一种方法是使用数组的值作为变量名。

for (var i=0;i<fruits.length;i++) {
  //psedo code
  var 'index' + fruits[i] = i;
}

因此,最后我将使var indexApple = 0,indexOrange = 1,依此类推。第二种方法的关键是能够通过将字符串'index'和数组的值连接起来来创建一个动态变量。变量。 不知道该怎么做。

注意:理想情况下,我希望动态生成存储索引的变量。 这样我只能修改/添加到fruits数组,然后将生成一个新变量来存储索引。

最简单的解决方案是简单地构建一个对象,该对象将为您提供接近O(1)的查找时间,并将随您的数组扩展:

function LinkFruits(fruits) {
    FruitLookup = {}
    fruits.forEach((fruit,ind) => FruitLookup[fruit] = ind)
}

现在,您可以根据需要在FruitLookup表中简单地“查找”索引,例如:

console.log("The index of apple is",FruitLookup.apple,"and for orange is",FruitLookup.orange)

现在,如果您修改数组,则只需运行LinkFruits(fruits)

技术说明:如果要完全自动化此过程,可以查看Array.observe() (现已弃用) 或者重载此数组的pushpop方法以触发更新,然后再使用默认的原型方法。

似乎很难确保索引的值合法。 我将包括jquery并使用inArray方法返回数组中该项的索引。

function showIndexes() {
  var appleIndex = $.inArray(fruits, "Apple"); //returns 0
  var guavaIndex = $.inArray(fruits, "Guava"); //returns -1

  fruits.unshift("Guava");
  appleIndex = $.inArray(fruits, "Apple"); //returns 1
  guavaIndex = $.inArray(fruits, "Guava"); //returns 0
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM