逻辑错误!使用字符串在指定位置插入数组

Posted

技术标签:

【中文标题】逻辑错误!使用字符串在指定位置插入数组【英文标题】:Logical error! in Array insertion at specified position using strings 【发布时间】:2021-07-23 12:35:51 【问题描述】:

我正在编写一个函数来提取单词中包含的单词的索引, 例如:4of Fo1r pe6ople g3ood th5e the2 这应该按顺序排列, 下面是代码,

function order(words)
    var result = []
    var sorting = words.split(' ').sort() 
    console.log(sorting);
    for(let i=0; i<sorting.length;i++)
    
      var temp = sorting[i].split('').sort()//By this the words in the sentence get sorted and i will get the index(number) of the corresponding word at first position.
      console.log(temp);
      var valueHolder = parseInt(temp) //I will take the above obtained value and convert it into integer
        console.log(valueHolder);
      result.splice((valueHolder-1),0,sorting[i]) //will pass the index here
    
    console.log(result);
  

但我得到了错误的输出:[ 'Fo1r', 'the2', '4of', 'g3ood', 'pe6ople', 'th5e' ] 我错过了什么吗,谁能帮我这个谢谢。 上面的array.splice(index,0,item) 只会在指定位置插入元素,并带有0

预期输出为:[ 'Fo1r', 'the2', 'g3ood', '4of', 'th5e','pe6ople' ]

【问题讨论】:

sorting[i].split('').sort() 会生成一个字符数组,如果我没有弄错的话,它会存储在temp 中。这怎么能用作parseInt的参数?? @TostMaster 我有目的地给出,因为 temp 总是给出初始索引值,因为我使用了排序,所以现在所有的数字都对齐了,通过使用 temp,我们将得到默认值作为初始索引项,这样我就可以获得真正的索引然后将其转换为整数 【参考方案1】:

您可以使用正则表达式,然后您可以解析 9 以上的数字。

正则表达式const r = /\d+/; 查找一位或多位数字。然后在排序方法a.match(r)中使用正则表达式,然后对结果数字进行解析和比较。

const str = '4of Fo1r pe6ople g3ood th5e no71w the2';

function order(words) 
  let result = [];
  let sorting = words.split(' ');
  const r = /\d+/;
  
  sorting.sort((a,b) => 
    return parseInt(a.match(r)) - parseInt(b.match(r));
  );
  console.log(sorting.join(' '));

order(str);

【讨论】:

@NilsKhaler,谢谢伙计,这也很好用【参考方案2】:

问题是您的结果数组初始大小未设置,因此在循环期间拼接将无法正常工作。

简单修复:

words='4of Fo1r pe6ople g3ood th5e the2';

function order(words)
    var result = []
    var sorting = words.split(' '); 
    var result = new Array(sorting.length);
    console.log(result)
    for(let i=0; i<sorting.length;i++)
    
      var temp = sorting[i].split('').sort()//By this the words in the sentence get sorted and i will get the index(number) of the corresponding word at first position.
      //console.log(temp);
      var valueHolder = parseInt(temp) //I will take the above obtained value and convert it into integer
        //console.log(valueHolder);
    result.splice(valueHolder-1,1,sorting[i]) //will pass the index here
   
    
    console.log(result);
  
  
order(words)

words='4of Fo1r pe6ople g3ood th5e the2';

function order(words)
    var result = []
    var sorting = words.split(' '); 
    var result = new Array(sorting.length);
   // console.log(result)
    for(let i=0; i<sorting.length;i++)
    
      var temp = sorting[i].split('').sort()//By this the words in the sentence get sorted and i will get the index(number) of the corresponding word at first position.
      //console.log(temp);
      var valueHolder = parseInt(temp) //I will take the above obtained value and convert it into integer
        //console.log(valueHolder);
    result.splice(valueHolder-1,1,sorting[i]) //will pass the index here
   
    
    console.log(result);
  
  
order(words)

【讨论】:

【参考方案3】:

Array#splice 不是你应该在这里使用的正确的东西,而是使用索引将元素添加到所需的位置。

function order(words) 
  var result = [];
  var sorting = words.split(" ").sort();
  for (let i = 0; i < sorting.length; i++) 
    var temp = sorting[i].split("").sort();
    var valueHolder = parseInt(temp);
    result[valueHolder - 1] = sorting[i];
  
  console.log(result);


order("4of Fo1r pe6ople g3ood th5e the2");

【讨论】:

@Aravinda KS 请检查这是否解决了您的问题,如果您有任何问题,请告诉我。【参考方案4】:

这适用于所有场景。使用regex的更少和最简单的代码。

解决方案

 function order(string) 
   var regex = /\d+/g;
   var matches = string.match(regex);        
   matches.sort(function(a, b)return parseInt(a)-parseInt(b));

   var splittedArr = string.split(' ');

   var result = [];
   matches.forEach(item => 
      const findItem = splittedArr.find(a => a.includes(item));
      result.push(findItem);
   )
   console.log(result)


order('4of Fo1r pe6ople g3ood th5e the2') // your string
order('77of Fo1r pe6ople g3ood th8e the2') // other string
order('0of Fo1r pe6ople g4ood th8e the2') // other string

【讨论】:

以上是关于逻辑错误!使用字符串在指定位置插入数组的主要内容,如果未能解决你的问题,请参考以下文章

在数组中插入元素

将字符串插入到另一个字符串的指定位置(串)

sed 怎样在文本里指定位置插入字符

JavaScript中在指定位置插入字符串

c语言 查找最大元素

将一个字符串插入到另一个字符串的指定位置。c语言编写