Javascript-仅使用pop()方法删除数组中的负值

Javascript-仅使用pop()方法删除数组中的负值,javascript,arrays,Javascript,Arrays,我试图仅使用Javascript中的pop()方法删除此数组中的负数。我知道pop()会删除最后一项,那么如何使用pop()删除此数组中的两个负数呢?谢谢大家! var x = [-3,5,1,3,2,10,-7]; for (var i = x.length-1; i >= 0; i--){ if (x[i] < 0){ x.pop(x[i]); } } console.log(x) var x=[-3,5,1,3,2,10,-7]; 对于(变量i=x.lengt

我试图仅使用Javascript中的pop()方法删除此数组中的负数。我知道pop()会删除最后一项,那么如何使用pop()删除此数组中的两个负数呢?谢谢大家!

var x = [-3,5,1,3,2,10,-7];
for (var i = x.length-1; i >= 0; i--){
  if (x[i] < 0){
    x.pop(x[i]);
  }
}
console.log(x)
var x=[-3,5,1,3,2,10,-7];
对于(变量i=x.length-1;i>=0;i--){
if(x[i]<0){
x、 pop(x[i]);
}
}
console.log(x)

您可以使用
过滤器
功能实现您想要的功能

var positiveNumbers = x.filter(function(number){ 
       return number>=0;
})
var x=[-3,5,1,3,2,10,-7];
var positiveEnumbers=x.filter(函数(编号){
返回编号>=0;
});

文件。编写(正数)我发现这是一个相当愚蠢的问题,只使用
.pop()
。这闻起来像是家庭作业,根本不是现实世界的问题


好的,现在已经公开了实际规则(仅使用
.pop()
删除值,而不使用临时数组),下面是一个仅使用
.pop()
从数组中删除值的方法。它假定不需要保留原始顺序(尽管这可以通过更多代码来实现)。这将在数组中反向工作,每当它找到负值时,它都会将该值与数组中的最后一个值交换,然后
.pop()
关闭该负值:

var x = [-3,5,1,3,2,10,-7], temp;
for (var i = x.length - 1; i >= 0; i--) {
    if (x[i] < 0) {
        if (i !== x.length - 1) {
            // swap current value with last value
            temp = x[i];
            x[i] = x[x.length - 1];
            x[x.length - 1] = temp;
        }
        x.pop();
    }
}
工作演示:


这些版本的代码出现在完整规则披露之前

您可以在数组中循环,每次弹出最后一项,然后仅使用您喜欢的值构建一个新数组:

var x = [-3,5,1,3,2,10,-7];
var y = [];
while (x.length) {
    var val = x.pop();
    if (val >= 0) {
        y[y.length] = val;
    }
}
x = y.reverse();
工作演示:

.pop()
仅删除数组中的最后一项。删除该特定项不需要参数,因此不能使用它删除数组中的第n项


在现实世界中,可以使用
.filter()
生成新数组,也可以使用
.splice()
删除单个元素

下面是一个
.splice()
解决方案:

var x = [-3,5,1,3,2,10,-7];
for (var i = x.length-1; i >= 0; i--){
  if (x[i] < 0){
    x.splice(i, 1);
  }
}
console.log(x)
或者,在ES6中:

let y = x.filter(val => val >= 0);

也许可以使用二维阵列

var x = [1, -2, 3]; //Your basic array
var x1 = [[1, -2, 3], [-2, 3, 1] ,[3, 1, -2]];
//Perhaps put this into a function?
for (var i = 0; i < x1.length; i++) {
  if (x1[i][x1.length] < 0) {
    x1[i].pop();
    return x1[i];
  }
}
var x=[1,-2,3]//您的基本阵列 变量x1=[[1,-2,3],-2,3,1],[3,1,-2]; //也许可以把它变成一个函数? 对于(变量i=0;i
这决不是一个有效的解决方案,但是如果您有少量的元素,它应该是好的

编辑:

以下是用于创建二维阵列的函数:

var createArray = function() {
  var x = [1, -2, 3]; //Your array here
  var x1 = []; //The 2D array
  for (var i = 0; i < x.length; i++) {
    x1[i] = []; //Makes the 2D array
  }
  x1[0] = x; //The first array
  for (var i = 0; i < x1.length; i++) {
    var last = x1[i].pop(); //Finds the last element
    x1[i+1][0] = last;
    for (var j = 0; j < x1[i].length; j++) {
      x1[i][j] = x1[i+1][j+1];
    }
  }
  return x1;
}
var createArray=function(){
var x=[1,-2,3];//这里是您的数组
var x1=[];//二维数组
对于(变量i=0;i
试试这个:

var x = [-3,5,1,3,2,10,-7];
var arr = x.map(function(item, index) {
    return [item, index]; // Add indices
});
arr.sort(function(a, b) {
    return b[0] - a[0];   // Sort by value
});
while(arr[arr.length-1][0] < 0)
    arr.pop();            // Pop negatives
arr.sort(function(a, b) {
    return a[1] - b[1];   // Undo sort
});
arr.map(function(item) {
    return item[0];       // Remove indices
});
var x=[-3,5,1,3,2,10,-7];
var arr=x.map(功能(项目、索引){
返回[项目,索引];//添加索引
});
arr.sort(函数(a,b){
返回b[0]-a[0];//按值排序
});
而(arr[arr.length-1][0]<0)
arr.pop();//流行底片
arr.sort(函数(a,b){
返回a[1]-b[1];//撤消排序
});
arr.map(功能(项目){
返回项[0];//删除索引
});
当然,这不是一个很好的消除负面影响的方法。

尽管我之前的评论是,这在
pop()
中是可能的,但它需要在迭代现有数组时创建另一个数组:

功能性方法(arr){
如果(!arr){
返回false;
}
var-temp=[];
对于(变量i=0,len=arr.length;ilog(x,荒谬的方法(x))
是否必须是该数组,并且只能是pop()方法,因为您可以对数组进行排序以将负数重新定位到末尾,然后使用pop()删除负数,为什么您只能使用
pop()
?因为除非您可以使用其他方法来操作数组,否则无法完成此操作。实际的限制是什么?而且,不管这是不是家庭作业,你能证明你试图删除第一个负数吗?这是一个愚蠢的问题
.pop()
仅删除数组中的最后一项。它不会将索引作为参数来删除该特定项。有像
.splice()
这样的方法来删除特定项。“我如何使用pop()删除此数组中的两个负数”你不会。下面是我得到的说明:(删除负数)给定一个包含多个值的数组X(例如,[-3,5,1,3,2,10]),编写一个程序来删除数组中的任何负数。一旦你的程序完成,X应该由正数组成。在不创建临时数组的情况下执行此操作,并且仅使用pop方法删除数组中的任何值。这是正确的(也是一种更好的方法),但它绝对不满足“仅使用pop()方法”的限制。@DavidThomas谢谢。一个问题。这可能吗?他如何循环一个数组,并以同样的方式删除这个数组的值?我认为这是不可能的。正确吗?不,这是不可能的(除非对
pop()
的限制是任意的,并且“某些”其他数组方法也可用)。它不应该读为:
returnnumber>=0
?否则,如果将来也允许零,它将失败得很惨。“你不能在遍历它的元素的同时从中删除元素。”我不同意:
for(var I=arr.length;I--;)}{arr.pop();}
谢谢。是的,我用splice做的,我创建了一个空数组,然后把正片放到新数组中,我只是不知道如何使用pop和非临时数组。这是说明书
var createArray = function() {
  var x = [1, -2, 3]; //Your array here
  var x1 = []; //The 2D array
  for (var i = 0; i < x.length; i++) {
    x1[i] = []; //Makes the 2D array
  }
  x1[0] = x; //The first array
  for (var i = 0; i < x1.length; i++) {
    var last = x1[i].pop(); //Finds the last element
    x1[i+1][0] = last;
    for (var j = 0; j < x1[i].length; j++) {
      x1[i][j] = x1[i+1][j+1];
    }
  }
  return x1;
}
var x = [-3,5,1,3,2,10,-7];
var arr = x.map(function(item, index) {
    return [item, index]; // Add indices
});
arr.sort(function(a, b) {
    return b[0] - a[0];   // Sort by value
});
while(arr[arr.length-1][0] < 0)
    arr.pop();            // Pop negatives
arr.sort(function(a, b) {
    return a[1] - b[1];   // Undo sort
});
arr.map(function(item) {
    return item[0];       // Remove indices
});