IndexOf数组,以字符串作为索引

时间:2014-12-16 14:45:55

标签: javascript arrays indexof

可能不明智,但我有一个带索引字符串的数组。现在我需要使用indexOf,但它不起作用。下面的代码返回-1。如何在没有重写所有内容的情况下从中获取b吗?

x = [];
x['a'] = 0;
x['b'] = 1;
print(x.indexOf(1));

3 个答案:

答案 0 :(得分:1)

x = [];
x['a'] = 0;
x['b'] = 1;

 var valueIndex = Object.keys(x).map(function(prop){
   return x[prop]
 }).indexOf(1);

Object.keys(x)[valueIndex] //b

除非确实按顺序执行

Object.keys(x)[1]; //b

答案 1 :(得分:1)

您不理解的基本问题是Array 不能将字符串作为索引。您正在使用的语法是一种定义对象属性的替代方法。人们给你的所有以前的建议可能会让你更加困惑。把事情简单化。数组有数字索引。

// this is adding values to an array
var x = [];
x[0] = 'one';
x[1] = 'two';
console.log(x[0]);       // outputs 'one'

// this is adding a property to an object
var y = {};
y['width'] = 20;
y['height'] = 40;
console.log(y['width']); // outputs 20
console.log(y.height);   // outputs 40

// this is adding a property to our previous array 
// (because Arrays are objects too in JavaScript)
x['name'] = 'My Array';
console.log(x.name);     // outputs 'My Array'

x.indexOf('My Array');   // returns -1 because 'My Array' is not stored in the array
x.indexOf('two');        // returns 1 because that's the index of 'two' in the array

答案 2 :(得分:0)

我在评论中提出的建议的具体代码,具体取决于现有代码中比for (prop in x)更容易或更难实现的方案:

function put(arr, letter, value) {
  arr[letter.toLowerCase().charCodeAt(0)-96] = value;
}
function find(arr, value) {
  return String.fromCharCode(x.indexOf(value)+96);
}

x = [];
put(x, 'a', 0);
put(x, 'b', 1);
print(find(x, 1)); // gives b