【问题标题】:I need a function which searches through an array and returns the last set of numbers after the last string?我需要一个函数来搜索数组并在最后一个字符串之后返回最后一组数字?
【发布时间】:2019-07-12 20:27:41
【问题描述】:

我需要一个函数调用 getLastNumbers 来搜索数组并返回最后一个运算符之后的最后一组数字。

例如:

[1, 1, 1, 1, 1, 1, "+", 2, 2, 2, 2, 2, 2, "*", 3, 3, 3, 3, 3, "-", 6, 6, 6, 6] Returns 6666

[1, 1, 1, 1, "+", 6, 6, 6, 6, 6, 6, "*", 9, 9, 9, 9, 9, "-", 6, 6, 6, 6, "+", 3, 3, 3] Returns 333

[7, "*", 7, "-", 6, "+", 3, "+", 6, "+", 3, 3, 3, 3, 3, "+", 6, "-", 5, 5, 5, 5, 5, 5, "*", 9, 9] Returns 99

[5, "*", 5] returns 5

为了澄清,我永远不会知道用户可以输入多少个数字或运算符。

在下面的尝试中查看我的冗长尝试:


function getLastNumber(arr){
let number = arr.filter(i => i === '*' || i === '/' || i === '+' || i === '-' ).length;

  let counter = 0;
  let arrayLength = arr.length;
  let lastOpIndex = [];

 for(let i = 0; i < arr.length; i++) {
   if(arr[i] === '*' || arr[i] === '+' ||arr[i] === '-' ||arr[i] === '/'){
     counter++;
     if (counter === number) {
       lastOpIndex.push(arr.indexOf(arr[i]));
     }
   }
 }

  let lastOpNum = parseInt(lastOpIndex.toString());
  let startNum = lastOpNum + 1;
  let mathNum = (arrayLength - lastOpNum) - 1;


  let finalArray = [];

  for(let i = startNum; i < arr.length; i++) {
    finalArray.push(arr[i]);
  }

  let strResult = finalArray.toString().split(',').join('');

  let finalResult = parseInt(strResult);

  return finalResult;


}



getLastNumber([1, "+", 3, 3, 3, 3, 3, "+", 6, "+", 9, "*", 6, 6, 6, 3, 6, 6, 6, "-", 5, "*", 9, 9, 9, 9, 9, 9, 9, '/', 6, 8, 9, 9, '*', 8, 8, 8, 7]);

【问题讨论】:

  • 如果您可能想接受答案,请删除您的问题,或者如果没有正确回答,请编辑它以阐明您的要求。这样它就不会再出现在未回答的部分了。

标签: javascript arrays


【解决方案1】:

由于问题再次公开,我将扩展我的评论。我认为您尝试实现这一目标的方式有点复杂。

这是我的方法,只是解决问题并从最后一个索引而不是第一个索引开始。 一旦我找到一个运算符,我就会打破循环并以相反的顺序返回保存的值。

function getLastNumber(arr){
 let ret = [];
 for(let i = arr.length - 1; i >= 0 ; i--) {
   if(arr[i] !== '*' && arr[i] !== '+' && arr[i] !== '-' && arr[i] !== '/') {
       ret.push(arr[i]);
   } else {
       break;
   }
 }
 return ret.reverse().toString();
}
console.log(getLastNumber([1, "+", 3, 3, 3, 3, 3, "+", 6, "+", 9, "*", 6, 6, 6, 3, 6, 6, 6, "-", 5, "*", 9, 9, 9, 9, 9, 9, 9, '/', 6, 8, 9, 9, '*', 8, 8, 8, 7]));
console.log(getLastNumber([1, 1, 1, 1, "+", 6, 6, 6, 6, 6, 6, "*", 9, 9, 9, 9, 9, "-", 6, 6, 6, 6, "+", 3, 3, 3]));
console.log(getLastNumber([7, "*", 7, "-", 6, "+", 3, "+", 6, "+", 3, 3, 3, 3, 3, "+", 6, "-", 5, 5, 5, 5, 5, 5, "*", 9, 9]));
console.log(getLastNumber([5, "*", 5]))

【讨论】:

    【解决方案2】:

     function filterNumbers(arr){
                let a = arr.lastIndexOf("*"); // find last index of *
                let b = arr.lastIndexOf("+"); // find last index of +
                let c = arr.lastIndexOf("-"); // find last index of -
                let d = arr.lastIndexOf("/"); // find last index of /
                let ind = Math.max(a, b, c, d); //find the max index
                console.log(ind);
                let newarr = arr.splice(ind+1,arr.length); //splice array 
                console.log(newarr);
             return newarr;
            }
         filterNumbers([1, 1, 1, 1, 1, 1, "+", 2, 2, 2, 2, 2, 2, "*", 3, 3, 3, 3, 3, 6, 6, 6, 6,1]);
              filterNumbers([1, 1, 1, 1, 1, 1, "+", 2, 2, 2, 2, 2, 2, "*", 3, 3, 3, 3,"/", 3, 6, 6, 6, 6,1]);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 2021-11-11
      • 1970-01-01
      • 2021-07-18
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多