js获取一串数字中某个数字的索引?

从右到左获取1所在位置的索引

    比如110 从右到左,从0开始,首次出现的位置是1
    比如120 首次出现的位置是2
    比如001 首次出现的位置是0
    比如011 首次出现的位置也是0
阅读 2.6k
6 个回答

js中有个lastIndexOf()的字符串方法,可以倒着查找字符,并返回这个索引值(若不存在则返回-1)。但这个索引值也是从左边开始计算的。

如果您这儿需要从右往左开始算索引值,需要用字符串的长度,计算出来。

/**
 * 获取字符1从右往左开始计算的索引
 * @param {string} str
 */
const getOneIndexFromLast = (str) => {
  const index = str.lastIndexOf("1");

  if (index === -1) {
    return index;
  }
  return str.length - index - 1;
};
var lastIndexOf = (str, sub) => str.length-str.lastIndexOf(sub)-1
lastIndexOf('110',1) // 1
lastIndexOf('120',1) // 2
lastIndexOf('001',1) // 0

对于边界情况:比如不存在,需要判断下

var getLastIndex = (str, v) => str.includes(v) ? str.split(v).slice(-1)[0].length : -1
getLastIndex('110', '1')

思路---反转该字符串,用indexOf查找这个数字
function getIndex(str,s){

if(str.split('').reverse().join("").indexOf(s)>-1){
    return str.split('').reverse().join("").indexOf(s)
}else{
    return "不存在"
}

}
getIndex("1234567",'3') //4
getIndex("1234567",'0') // '不存在'

方法一,lastIndexOf,再来做索引运算

"110,120,001,011".split(",")
    .map(s => s.length - s.lastIndexOf("1") - 1)
    .forEach(n => console.log(n));

方法二,转成数组,reverse 反向,再用 indexOf 来找

"110,120,001,011".split(",")
    .map(s => [...s].reverse().indexOf("1"))
    .forEach(n => console.log(n));

方法三,自己写个函数来找

function indexOfRight(s, n) {
    for (let i = s.length - 1, j = 0; i >= 0; i--, j++) {
        if (s[i] === n) { return j; }
    }
    return -1;
}

"110,120,001,011".split(",").map(s => indexOfRight(s, "1")).forEach(n => console.log(n));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏