开发者问题收集

JavaScript 中 indexOf 的正确使用

2021-06-06
59

我有一个 javascript 对象:

console.log( 'TYPE OF MY OBJECT:' + typeof myObject );
console.log( 'MY OBJECT:' + myObject );

结果:

TYPE OF MY OBJECT:object
MY OBJECT:der,die,das

如何查找此对象中是否存在字符串?

我尝试使用 indexOf,但似乎不起作用,因为警报框从未出现:

var stringToFind = 'der';
if ( Object.keys( myObject ).indexOf( stringToFind ) != -1 ) {
    alert('OK');
}

我也尝试过这个:

var stringToFind = 'der';
if ( myObject.indexOf( stringToFind ) != -1 ) {
    alert('OK');
}

它引发了一个错误:

Uncaught TypeError: Cannot read property '0' of undefined

最后我尝试了这个

var stringToFind = 'der';
if ( Object.values( myObject ).indexOf( stringToFind ) != -1 ) {
    alert('OK');
}

它也引发了相同的错误:

Uncaught TypeError: Cannot read property '0' of undefined

有人可以帮忙吗?

3个回答

对象没有“字符串”。它们有“属性”,可以是任何东西。

如果您想检查对象上是否存在某个属性,您可以执行以下操作。

var myObject = {
  foo: 123
}

typeof myObject.foo // "Number"
typeof myObject.bar // "undefined"
andershagbard
2021-06-06

indexOf() 用于获取字符串中子字符串的位置或获取数组中元素的位置。

If it fails to find element then function will return -1

例如。

// With string
const str = "this string contains a substring.";

console.log(str.indexOf( "substring"));     // returns 23
console.log(str.indexOf( "not in str" ));   // returns -1

// With list
const fruits = ['apple', 'orange', 'grape'];
console.log(fruits.indexOf( 'grape' ))      // returns 2
console.log(fruits.indexOf( 'gra'   ))      // returns -1 since 'gra' is not a element of fruits array

// If you want to find 'grape' with 'gra'
const result = fruits.filter((fruit) => { if (fruit.indexOf('gra') !== -1) return fruit});
console.log( result ) // returns ["grape"]
Abhin Krishna KA
2021-06-06

由于它是一个数组,您可以检查下面的代码以了解 indexOf 方法的用例。

const stringToFind = 'die';
const myArray = ['der', 'die', 'das'];

if(myArray.indexOf(stringToFind)) {
  alert("OK");
}

此外,我建议您按照良好的惯例命名变量,以提高代码的可读性。

jateen
2021-06-06