反向数组不包含所有元素
Reversed array does not contain every element
为什么我的函数只返回[3,2,]?它也应该打印出元素1吗?
function reverseArr(arr) {
var reverse = [];
for (var i = 0; i < arr.length; i++)
reverse.push(arr.pop());
return reverse;
}
console.log(reverseArr([1, 2, 3]));
因为每次迭代都在修改arr
,所以arr.length
也在变化。试试这个:
function reverseArr(arr) {
var reverse = [], len = arr.length;
for (var i = 0; i < len; i++)
reverse.push(arr.pop());
return reverse;
}
但是,请注意,这将修改原始数组,这可能不是您想要的。如果您想保留原始数组,请使用unshift
代替:
function reverseArr(arr) {
var reverse = [], len = arr.length;
for (var i = 0; i < len; i++)
reverse.unshift(arr[i]);
return reverse;
}
或者,您可以使用slice
和reverse
的组合来返回一个新的、反向的输入数组副本,而不修改原始数组:
function reverseArr(arr) {
return arr.slice().reverse();
}
问题是您在弹出数组时更改了数组的长度。所以arr.length
从3开始,然后2,然后1。相反,您可以这样做:
function reverseArr(arr) {
var reverse = [];
while (arr.length) {
reverse.push(arr.pop());
}
return reverse;
}
或
function reverseArr(arr) {
var reverse = [];
while (arr.length > 0)
reverse.push(arr.pop());
return reverse;
}
或
function reverseArr(arr) {
var reverse = [];
for (var i = 0; i < arr.length; i++)
reverse.push(arr[arr.length - 1 - i]);
return reverse;
}
或者简写为arr.reverse()
相关文章:
- 搜索包含包含所需值的范围的数组
- 如果 e.keyCode 是“输入”按钮,并且元素包含其他文本,则验证条件
- 不要在窗体序列化时将元素包含在 ng-hide 中
- AngularJS - Grunt:是否存在一种解决方案来构建仅包含所需模块的正在运行的应用程序
- 如何获取仅包含所选复选框中的值的数组
- 如何删除包含所有空值的数组列
- 如果元素包含某些文本
- 如何使 Internet Explorer 在将 innerHTML 传输到
- 样式选择元素与所选选项具有相同的样式
- 元素包含的特定类的 jQuery 计数
- 将TreeStore转换为仅包含所需字段的Store
- 当表单元素包含带有一些特殊符号的id时,jQuery验证器会出错'无法识别的表达式'
- 若最近的元素包含字符串,则将类添加到元素中
- 如果DOM元素包含字符串,请删除该元素
- 比较el.text()===“;字符串“;即使元素包含“”;字符串”;
- Javascript If List元素包含'不管怎样',don't显示
- 如何将元素按所需格式推入数组
- font- family:宋体;If元素包含非拉丁字符
- 如何从 filtervalues 中进行选择,其中流派逗号分隔的值仅包含所选内容
- 如果元素包含h1,则从另一个元素中删除h1