我需要一个函数来搜索数组并在最后一个字符串之后返回最后一组数字?

Posted

技术标签:

【中文标题】我需要一个函数来搜索数组并在最后一个字符串之后返回最后一组数字?【英文标题】: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]);

【问题讨论】:

如果您可能想接受答案,请删除您的问题,或者如果没有正确回答,请编辑它以阐明您的要求。这样它就不会再出现在未回答的部分了。 【参考方案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]);

【讨论】:

以上是关于我需要一个函数来搜索数组并在最后一个字符串之后返回最后一组数字?的主要内容,如果未能解决你的问题,请参考以下文章

在关闭事件时从 node.js readline 模块返回数组

我正在编写一个 PHP 函数来搜索 Wordpress 模板文件中的邮政编码数组。为啥我的函数不返回值?

我们最后需要返回完成之后数组的长度。

函数不返回编辑的数组

javascript中是不是有indexOf来搜索具有自定义比较功能的数组

双指针法