我试图仅使用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)
答案 0 :(得分:2)
我发现这只是一个相当愚蠢的问题,只能使用.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();
}
}
工作演示:http://jsfiddle.net/jfriend00/wo8fhoor/
而且,这是一个保留数组顺序的版本,同时仅使用.pop()
从数组中删除项目。当它找到负值时,它会复制数组中的所有后续项(从而将其删除),然后使用.pop()
将数组缩短一个:
var x = [-3,5,1,3,2,10,-7];
for (var i = 0; i < x.length; i++) {
if (x[i] < 0) {
removeItem(x, i);
}
}
log(x);
function removeItem(array, index) {
for (var i = index; i < array.length - 1; i++) {
array[i] = array[i + 1];
}
array.pop();
}
工作演示:http://jsfiddle.net/jfriend00/uvqx6hq0/
这些版本的代码是在披露完整规则之前发布的
你可以遍历数组,每次弹出最后一项,然后构建一个只包含你喜欢的值的新数组:
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();
工作演示:http://jsfiddle.net/jfriend00/2atz6ck9/
.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)
工作演示:http://jsfiddle.net/jfriend00/gqt5avLb/
而且,这是使用.filter()
的解决方案:
var y = x.filter(function(val) {
return val >= 0;
});
或者,在ES6中:
let y = x.filter(val => val >= 0);
答案 1 :(得分:0)
您可以使用filter
功能实现您想要的功能。
var positiveNumbers = x.filter(function(number){
return number>=0;
})
var x = [-3,5,1,3,2,10,-7];
var positiveNumbers = x.filter(function(number){
return number>=0;
});
document.write(positiveNumbers);
&#13;
使用您尝试的pop
方法是不可能的。根据{{3}}:
pop()方法从数组中删除最后一个元素并返回 那个元素。
此外,您无法同时尝试迭代数组元素并从此数组中删除元素。它没有意义。您可以过滤数组的元素,可以删除特定元素,也可以向数组中添加元素,但是您可以定义循环遍历它的元素,同时从中删除元素。
答案 2 :(得分:0)
也许您可以使用2D数组。
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];
}
}
这绝不是一个有效的解决方案,但如果你的元素数量很少就应该没问题。
修改强>
这是一个用于创建2D数组的函数:
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;
}
答案 3 :(得分:0)
试试这个:
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
});
当然,这不是消除否定的好方法。
答案 4 :(得分:0)
这个是,尽管我之前的评论可能是pop()
,但它需要创建另一个数组,同时迭代现有数组:
function ridiculousApproach(arr) {
if (!arr) {
return false;
}
var temp = [];
for (var i = 0, len = arr.length; i < len; i++) {
temp.push(arr[i]);
if (arr[i] < 0) {
temp.pop();
}
}
return temp;
}
var x = [-3, 5, 1, 3, 2, 10, -7];
console.log(x, ridiculousApproach(x));
&#13;
这是荒谬的,因为首先不将负数添加到temp
数组会更容易,也更明智:
function ridiculousApproach(arr) {
if (!arr) {
return false;
}
var temp = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (arr[i] > -1) {
temp.push(arr[i]);
}
}
return temp;
}
var x = [-3, 5, 1, 3, 2, 10, -7];
console.log(x, ridiculousApproach(x));
&#13;