Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将两个值作为边界条件过滤数组_Javascript_Arrays_Loops_Foreach - Fatal编程技术网

Javascript 如何将两个值作为边界条件过滤数组

Javascript 如何将两个值作为边界条件过滤数组,javascript,arrays,loops,foreach,Javascript,Arrays,Loops,Foreach,我有一个如下的数组 const num = [1,2,3,4,5,6,7]; 和边界条件值 var first = 6 var second = 3 预期产出基于此,现在如下所示 [6,7,1,2,3] 解释: 结果应组合两个阵列: =左边的第一个[6,7] { 如果(p>=num.indexOf(first)){return n} 如果(p{ 如果(p>=num.indexOf(first)){arr.push(n)} }); num.forEach((n,p)=>{ 如果(pvar n

我有一个如下的数组

const num = [1,2,3,4,5,6,7];
和边界条件值

var first = 6
var second = 3
预期产出基于此,现在如下所示

[6,7,1,2,3]
解释:

结果应组合两个阵列:

  • =左边的第一个
    [6,7]
  • {
    如果(p>=num.indexOf(first)){return n}
    如果(p{
    如果(p>=num.indexOf(first)){arr.push(n)}
    });
    num.forEach((n,p)=>{
    如果(p
    var num=[1,2,3,4,5,6,7];
    var first=6;
    第二个变量=3;
    常数res=[
    …num.filter((n)=>n>=第一个),
    …num.filter((n)=>n{
    如果(n>=第一个)向左,则按(n);
    如果(n
    var num=[1,2,3,4,5,6,7];
    var first=6;
    第二个变量=3;
    常数res=[
    …num.filter((n)=>n>=第一个),
    …num.filter((n)=>n{
    如果(n>=第一个)向左,则按(n);
    
    如果(n首先,我想澄清要求,结果应结合2个数组:

  • =左边的第一个
    [6,7]
  • {
    如果(当前>=第一)根据第一次推送(当前);
    
    如果(curr首先,我想澄清要求,结果应结合2个数组:

  • =左边的第一个
    [6,7]
  • {
    如果(当前>=第一)根据第一次推送(当前);
    
    if(curr使用
    .filter
    的初始解决方案大部分有效,但
    .filter
    无法对数组重新排序

    找到第一个值的索引。使用它切掉数组的结尾。找到第二个值。使用它切掉数组的开头。将两个部分连接起来

    const secondIdx=num.indexOf(秒);
    常量firstIdx=num.indexOf(第一,第二+1);
    const results=num.slice(firstIdx).concat(num.slice(0,secondIdx+1));
    
    使用
    .filter
    的初始解决方案基本有效,但
    .filter
    无法对数组重新排序

    找到第一个值的索引。使用它切掉数组的结尾。找到第二个值。使用它切掉数组的开头。将两个部分连接起来

    const secondIdx=num.indexOf(秒);
    常量firstIdx=num.indexOf(第一,第二+1);
    const results=num.slice(firstIdx).concat(num.slice(0,secondIdx+1));
    
    至少可以说,您的请求似乎很特殊,但以下几点应该可以满足您的要求:

    const arr=[1,2,3,4,5,6,7];
    //查看元素的位置:
    const getsubrayspos=(ar,m,n)=>[…ar,…ar].slice(m-1,ar.length+n);
    控制台日志(GetSubraySPos(arr,6,3))
    //查看数组值:
    const getsubraysval=(ar,m,n)=>[].concat.call(…ar.reduce((a,c)=>{
    if(m>n){if(c>=m)a[0].push(c);else if(c=m&&c至少可以说,您的请求似乎很特殊,但以下几点应该可以完成这项工作:

    const arr=[1,2,3,4,5,6,7];
    //查看元素的位置:
    const getsubrayspos=(ar,m,n)=>[…ar,…ar].slice(m-1,ar.length+n);
    控制台日志(GetSubraySPos(arr,6,3))
    //查看数组值:
    const getsubraysval=(ar,m,n)=>[].concat.call(…ar.reduce((a,c)=>{
    


    if(m>n){if(c>=m)a[0]。推(c);否则如果(c=m&&c如果交换第一个和第二个边界条件,那么预期的输出是什么?@Terry别担心Terry我已经处理过这种情况。但是,我正在寻找一种更好的方法,而不必做两次筛选。我用
    first
    second
    交换运行了您的第二个代码片段,并获得了输出
    [3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6]
    。你需要正确地说出你想要数组所基于的条件。我刚才在我的文章中提到了这个条件。你可以看看它@Xua&TerryThat's cool!…如果交换第一个和第二个边界条件,预期的输出是什么?@Terry别担心,Terry,我已经处理过这种情况。但是,我来看看我运行了你的第二个代码片段,将
    first
    second
    交换,得到了输出
    [3,4,5,6,7,1,2,3,4,5,6]
    。你需要正确地说出你想要数组所基于的条件。我刚才在我的文章中提到了这个条件。你可以看看它@Xua&TerryThat's cool!…类似的事情我在我的问题中也提到过,这不是一种有效的方法,因为它需要两个过滤器。更新:空间换时间,只需循环一次类似的东西在我的问题中,这不是一个有效的方法,因为它需要两个过滤器。更新:空间换时间,只需循环一次。我没有否决,但你将第二个边界条件更改为7。你能告诉我为什么更新了我的评论吗。谢谢。我已经更新了我的答案,并提供了详细的请求解释。你应该在你的帖子@VikasA中提到它charyasorry我应该提到什么?我刚刚用
    解释
    部分编辑了你的帖子。请看一看。很抱歉我没有否决,但你将边界条件改为7。你能告诉我为什么更新了我的评论吗?谢谢我用详细的请求解释更新了我的答案。你应该在你的帖子@Vik中提到它asAcharyasorry我应该提到什么?我刚刚用
    解释
    部分编辑了你的帖子。请看一下。谢谢你,先生,但我需要检查你的版本的时间复杂度和减少的函数来标记这是答案。我还意识到你可能想查看数组项的值,而不是在它们的位置,就像我在这里做的那样。如果数组没有排序会发生什么?我将从服务器获取两个值,有时是2,5,有时是5,2。在这两种情况下,我需要获取数组,如
    2,5->[2,3,4,5]
    5,2->[5,6,7,1,2]
    是的,正如我上面所猜测的那样。@VikasAcharyaThank您,先生,但我需要检查您的版本的时间复杂度和简化函数,以将其标记为答案。我还意识到您可能希望查看数组项的值,而不是像我在这里所做的那样查看它们的位置。如果数组未排序,会发生什么?我将得到两个v来自服务器的值,有时
    const result = num.filter((n,p) => {
      if(p >= num.indexOf(first)) {return n}
      else if(p <= num.indexOf(second)) {return n}
    });
    
    
    console.log(result) // [1,2,3,6,7]
    
    const num = [1,2,3,4,5,6,7];
    var first = 6
    var second = 3
    var arr = []
    num.forEach((n,p) => {
      if(p >= num.indexOf(first)) {arr.push(n)}
    });
    num.forEach((n,p) => {
      if(p <= num.indexOf(second)) {arr.push(n)}
    });
    
    console.log(arr) //[6,7,1,2,3]
    
    var num = [1, 2, 3, 4, 5, 6, 7];
    var first = 6;
    var second = 3;
    const res = [
      ...num.filter((n) => n >= first),
      ...num.filter((n) => n <= second)
    ];
    console.log(res); // [6,7,1,2,3]
    
    var num = [1, 2, 3, 4, 5, 6, 7];
    var first = 6;
    var second = 3;
    var left = [];
    var right = [];
    num.forEach((n) => {
      if (n >= first) left.push(n);
      if (n <= second) right.push(n);
    });
    const res = [...left, ...right];
    console.log(res); // [6,7,1,2,3]