循环数组,并将数据推送到另一个数组

时间:2017-02-05 01:36:00

标签: javascript

我正在用JavaScript编写一个小脚本来输出一个数组。 我想使用'years'数组,将数据推送到另一个名为new_array的数组中,然后通过console.log()输出。

唯一的问题是,这是输出! enter image description here

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)

}

5 个答案:

答案 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 ,这是一个没有任何可枚举属性的字符串,因此是空数组

如果你打算以相反的顺序返回数组的副本,那么复制数组并反转它:

&#13;
&#13;
var years = [1996, 1994, 1981, 1976];

// Copy with slice, reverse with reverse
var reversed = years.slice().reverse();
console.log(reversed)
&#13;
&#13;
&#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()改变了数组长度。