indexOf和lastIndexOf在另外一种情况下给出相同的东西

时间:2018-02-07 11:47:59

标签: javascript

var arrays = ['stew', 'rice', 'Beans', 'yam', 'plantain', 'potatoe',
  'margarine', 'barbeque', 'semovota', 'bournvita'
];
var arr3 = arrays.lastIndexOf('stew');
console.log(arr3);

indexOf和lastIdexOf在两种情况下都给出了相同的东西0,当lastIndexOf从后面计数时如何。正确答案似乎是9

7 个答案:

答案 0 :(得分:6)

这是因为从开始或向后,"stew"位于0的相同位置。

From docs of lastIndexOf()

  

lastIndexOf()方法返回在数组中可以找到给定元素的最后一个索引,如果不存在则返回-1。向后搜索数组,从fromIndex开始。

当你在中间或结尾有另一个“炖菜”时,你会看到真正的区别。

var arrays = ['stew','rice','Beans','yam','plantain','potatoe',
      'margarine','barbeque','semovota','bournvita','stew'];
 var arr3 = arrays.lastIndexOf('stew');
 console.log(arr3); // 10

答案 1 :(得分:3)

lastIndex无法从后面开始计算。它从最后一个匹配项的开头返回索引。

答案 2 :(得分:3)

lastIndexOf()不会从后面开始计算,它只是为您提供搜索的最后一个重复项目的索引。如果你把'stew'再次放在0之前的某个数组中,它会给你它的索引,而indexOf会给你第一个索引。

示例:

const array = ['stew','rice','Beans','yam','plantain', 'stew','potatoe','margarine','barbeque','semovota','bournvita'];

let regularIndex = array.indexOf('stew');
let lastIndex = array.lastIndexOf('stew');
console.log(regularIndex);
console.log(lastIndex);

// console prints:
// 0
// 5

答案 3 :(得分:1)

“indexOf” - >第一个元素的位置是什么。

“lastIndexOf - >最后一个元素是什么。

如果你想要从后到前的位置,请看下面的内容:

var listagem = ['stew', 'rice', 'semovota', 'stew', 'bournvita'];
var postFirstIndex = listagem.indexOf('stew');
var postLastIndex = listagem.lastIndexOf('stew');
var postLastIndexInverted = listagem.length - listagem.lastIndexOf('stew') - 1;
alert(postFirstIndex);
alert(postLastIndex);
alert(postLastIndexInverted);

答案 4 :(得分:0)

lastIndexOf为您提供起始索引,但从右侧开始计算数组内的最后一次出现。 在这里有单一的出现,所以它给0,但当你输入多个出现时,你会看到差异: -

var arrays = ['stew','rice','Beans','yam','plantain','potatoe',
      'margarine','barbeque','semovota','stew','bournvita'];
       var arr3 = arrays.lastIndexOf('stew');
       console.log(arr3); // will give you 9
       var arr3 = arrays.lastIndexOf('margarine');
       console.log(arr3); // will give you 6 

现在它给你9.因为炖2次

答案 5 :(得分:0)

只有一个值“stew”在你的数组中,位于索引0处。这是“stew”的第一个和最后一个索引,因此这就是indexOf和lastIndexOf都返回0的原因。

向数组变量添加第二个“stew”值,然后观察日志的输出。

此外,lastIndexOf不会从最后一个索引开始计数,它与搜索函数的方向没有区别,因为它必须遍历N个元素,其中N是给定数组的长度。

以下示例

var source = ["foo", "bar", "foo"];

console.log(source.indexOf("foo"));
//Above will log 0.

console.log(source.lastIndexOf("foo"));
//Above will log 2

console.log(source.lastIndexOf("bar"));
//Above will log 1

console.log(source.lastIndexOf("bar") === source.indexOf("bar"));
//Above will log true, as "bar" occurs only once in the array,
//just like "stew" in your question.

console.log(source.indexOf("cheese"));
//Above will log -1, just for fun ha ha

希望有所帮助。

答案 6 :(得分:0)

lastIndexOf() 不从后面开始计数,它只是为您提供搜索的最后一个重复项的索引。如果您再次将 'stew' 放入数组中 0 索引之后的某个位置,它将为您提供其索引,而 indexOf 将提供第一个索引。

"indexOf" -> 炖元素第一次出现的位置是什么。

"lastIndexOf -> 炖菜元素最后一次出现的位置是什么。

如果数组是这样的 -> var arrays = ['stew', 'rice', 'Beans', 'yam', 'plantain', 'potatoe','margarine', 'barbeque', 'semovota', 'bournvita', '炖'];

arrays.lastIndexOf('stew') 将返回 10