【问题标题】:function that returns prime index characters in an array JavaScript在数组 JavaScript 中返回素数索引字符的函数
【发布时间】:2015-12-03 12:34:57
【问题描述】:

我想从一个字符串中选择其索引对应于 1 到 100 之间的素数的字符并将它们返回到一个数组中。例如,如果我的输入是“abcdefghijklm”,则函数应该返回 ["c", "d", "f", "h", "l", "n"] 因为 "c" 对应于索引 2 (2 =素数),“d”对应于索引3(3 =素数)等

这是我的代码:

function primeChars (string) {
  if (string.length <= 1) {
    return "empty string";
  }
  var primeIdx = [];
  var res = []; 
  for (var val = 0; val <= 100; val++) {
    var notPrime = false;
    for (var i = 2; i <= val; i++) {
      if (val%i===0 && i!==val) {
        notPrime = true;
      }
    }
    if (notPrime === false) {
      primeIdx.push(val);
    }
  }

  for (var i = 0; i < primeIdx.length; i++) {
    for (var j = 0; j <string.length; j++) {
      if (i === j) {
        return res.push(string[j]);
      }
    }
  }
}

【问题讨论】:

  • 您忘记解释问题所在和/或提出问题。你只说了你的最终目标是什么。
  • 抱歉,问题很简单,就是我的代码没有按照我的预期工作。它只返回一个数字而不是一个字符数组。我只是想知道为什么......

标签: javascript arrays string


【解决方案1】:

试试这个

$(document).ready(function(){
  getArrayPrime('ABCDEFGHIJLM');  
});

function getArrayPrime(myString){
    var resultArray = [];

    for(var i=0;i<myString.length;i++){
        if(isPrime(i)){
        resultArray.push(myString[i]);
      }
    } 
        console.info('resultArray:',resultArray);
}

function isPrime(value) {
    for(var i = 2; i < value; i++) {
        if(value % i === 0) {
            return false;
        }
    }
    return value > 1;
}

【讨论】:

  • 简单地发布替代代码是没有帮助的。一个好的答案将解释 OPs 问题以及如何解决它。此外,没有高于value/2 的值可能是一个因素,因此没有必要进行更高的测试。
【解决方案2】:

添加 cmets 以改进您当前的代码。如有任何疑问,请随时提出。

function primeChars (string) {
  //Why string.length <= 1 it should be 0. Even string with 1 char possible.

  if (string.length <=  1) {
    return "empty string";
  }

  var primeIdx = [];
  var res = []; 

  //Why we need to find all primeindexes instead try to find prime indexes max upto string length or if string length > 100 then upto 100.

  for (var val = 0; val <= 100; val++) {
    var notPrime = false;

    //can run this loop upto i< val and can avoid checking of i !== val

    for (var i = 2; i <= val; i++) {
      if (val%i===0 && i!==val) {
        notPrime = true;
      }
    }
    //if we will run it upto string length no need to store prime indexes just get data at those index and you are done.
    //res.push(string[val])
    if (notPrime === false) {
      primeIdx.push(val);
    }
  }

  for (var i = 0; i < primeIdx.length; i++) {
    for (var j = 0; j <string.length; j++) {
      if (i === j) {
        return res.push(string[j]);
      }
    }
  }
}

【讨论】:

  • 简单地发布替代代码是没有帮助的。一个好的答案将解释 OPs 问题以及如何解决它。
猜你喜欢
  • 1970-01-01
  • 2021-09-27
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
相关资源
最近更新 更多