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)=>{
如果(pvar num=[1,2,3,4,5,6,7];
var first=6;
第二个变量=3;
常数res=[
…num.filter((n)=>n>=第一个),
…num.filter((n)=>n{
如果(n>=第一个)向左,则按(n);
如果(nvar 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]