![](/img/trans.png)
[英]Passing array values to javascript function and storing it in an variable
[英]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()
(现已弃用) 。 或者重载此数组的push
和pop
方法以触发更新,然后再使用默认的原型方法。
似乎很难确保索引的值合法。 我将包括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.