我正在用JavaScript编写一个小脚本来输出一个数组。 我想使用'years'数组,将数据推送到另一个名为new_array的数组中,然后通过console.log()输出。
years = [1996, 1994, 1981, 1976];
new_array = [];
for(i = 0; i <= years.length; i++) {
popped_element = Object.values(years.pop([i]));
new_array.push(popped_element);
console.log(new_array)
}
答案 0 :(得分:3)
也许你真的想这样做?
var years = [1996, 1994, 1981, 1976];
var reverse_years = years.slice().reverse(); // years.slice() creates new instance of Array so .reverse() does not affect original Array
console.log(reverse_years);
如果您不关心原始阵列是否受到影响:
var years = [1996, 1994, 1981, 1976];
years.reverse(); console.log(years);
答案 1 :(得分:2)
你过度复杂了,你不要同时使用for循环和pop,除非你从头到尾迭代
如果你在弹出结束时从头开始迭代,你将只获得一半数组:
years = [1996, 1994, 1981, 1976];
new_array = [];
for(i = 0; i < years.length; i++) {
new_array.push(years.pop());
}
console.log(new_array)
如果要修改原始数组,则有两个选项
1)使用A While循环
只要原始数组中仍有元素,保持循环
years = [1996, 1994, 1981, 1976];
new_array = [];
while(years.length) {
new_array.push(years.pop());
}
console.log(new_array)
2)使用减少循环
从循环结束迭代到开头
years = [1996, 1994, 1981, 1976];
new_array = [];
for(i = years.length - 1; i >= 0; i--) {
new_array.push(years.pop());
}
console.log(new_array)
答案 2 :(得分:1)
只需迭代并指定:
years = [1996, 1994, 1981, 1976];
new_array = [];
for(var i=0; i<years.length; i++) {
new_array.push(years[i]);
console.log(new_array);
}
然后以崇敬的顺序排列元素(如果那是你想要的):
new_array.reverse();
并从年份中删除项目(再次,如果这是你想要的):
years = [];
..或者,只需使用slice
复制:
new_array = years.slice();
答案 3 :(得分:1)
你不能说出代码的用意是什么,但无论如何都有一些问题:
for(i = 0; i <= years.length; i++) {
popped_element = Object.values(years.pop([i]));
Object.values 是实验性的,并没有广泛使用,所以你不应该使用它。 pop 不接受任何参数,因此每次 pop years 的最后一个值。并且你在 pop 返回的值上调用 Object.values ,这是一个没有任何可枚举属性的字符串,因此是空数组
如果你打算以相反的顺序返回数组的副本,那么复制数组并反转它:
var years = [1996, 1994, 1981, 1976];
// Copy with slice, reverse with reverse
var reversed = years.slice().reverse();
console.log(reversed)
&#13;
答案 4 :(得分:0)
在循环的第一行中删除对Object.values()的调用,以解决空数组问题:
popped_element = years.pop();
来自MDN:
Object.values()方法返回给定对象自己的可枚举属性值的数组。
您的年份没有可枚举的属性值,因此它返回一个空数组并将该空数组添加为new_array中的元素。
最后的undefined
归因于=
中的<= years.length
。要修复,请创建该循环线:
for(i = 0; i < years.length; i++) {
或者更好的是,在循环之前存储长度并与之比较,而不是在每次循环迭代时访问years.length,因为pop()改变了数组长度。