可能不明智,但我有一个带索引字符串的数组。现在我需要使用indexOf
,但它不起作用。下面的代码返回-1。如何在没有重写所有内容的情况下从中获取b
吗?
x = [];
x['a'] = 0;
x['b'] = 1;
print(x.indexOf(1));
答案 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