For循环仅显示数组的最后一个值

时间:2018-07-09 12:35:46

标签: javascript arrays for-loop

因此,我有一个名为“ options”的对象,其中包含以下项:

var options = {
  assignments: ['involved', 'assignee', 'candidate'],
  assignment: ""
}

使用for循环,我试图将数组分配中的值逐一放入赋值var中。然后,我将带有新值的“选项”用作我在循环内调用的另一个函数的参数。

for (var i = 0; i < options.data.assignments.length; i++) {
  options.data.assignment = options.data.assignments[i];
  console.log("value of i : ",i);
  console.log("value of options :",options);
  otherFunction(options);
}

我原本希望看到这样的结果:

  

i的值:0

     

选项值:{assignment =“ involved” ...}

     

i的值:1

     

期权价值:{assignment =“ assignee” ...}

     

i的值:2

     

选项值:{assignment =“候选” ...}

但是我却是这样的:

  

i的值:0

     

选项值:{assignment =“候选” ...}

     

i的值:1

     

选项值:{assignment =“候选” ...}

     

i的值:2

     

选项值:{assignment =“候选” ...}

事情是在做的时候,我的赋值变量总是设置为“候选”,即数组末尾的值。

奇怪的是,当我尝试console.log(options.data.assignments[i])时,会显示正确的值。与“ i”相同,它从0到1再到2,然后正确停止。因此,我的循环工作得非常好,除非要设置变量的值。

有什么想法吗?

谢谢

4 个答案:

答案 0 :(得分:5)

for (var i = 0; i < options.data.assignments.length; i++) {
  options.data.assignment = options.data.assignments[i];
}

将循环3次:

  1. options.data.assignment = options.data.assignments[0]-> options.data.assignment='involved'
  2. options.data.assignment = options.data.assignments[1]-> options.data.assignment='assignee'
  3. options.data.assignment = options.data.assignments[2]-> options.data.assignment='candidate'

因此,实际上,您正在将3个不同的数据一一分配给相同的值,因此,最后options.data.assignment将是循环的最后一个值。

下面是一个简单示例:

var a = 0;
for (var i = 0; i < 3; i++) {
   a = i;
}

如您所见,最后变量a将始终是循环i的最后一个值。

首先,它应该是options.assignments,而不是options.data.assignments。 这是你想要的东西

var options = {
  assignments: ['involved', 'assignee', 'candidate'],
  assignment: ""
}

for (var i = 0; i < options.assignments.length; i++) {
  options.assignment = options.assignments[i];
  console.log("value of i : ",i);
  console.log("value of options :", options);
  // otherFunction(options);
}

这就是我得到的: enter image description here

如您所见,我的作业正在更改

答案 1 :(得分:2)

您正在将所有内容分配给相同的var,同时替换之前的值。 如果只想将数组中的所有元素连接到字符串,则可以这样做

for (var i = 0; i < options.data.assignments.length; i++) {
  options.data.assignment += options.data.assignments[i]+',';
}

编辑:如@puzhi所说: 您也可以这样做来处理最后一个','而不必在之后删除它

options.data.assignment = options.data.assignments.join(',')

答案 2 :(得分:0)

您要在循环中的每次迭代中重新分配相同的变量,这就是为什么在第三次循环后才分配最后一个值。

您只需执行此操作即可实现所需的功能。

 options.data.assignment = options.data.assignments.map(ele=>ele)

答案 3 :(得分:0)

var options = {
    assignments: ['involved', 'assignee', 'candidate'],
    assignment: ""
  }
  for (var i = 0; i < options.assignments.length; i++) {
    options.assignment += options.assignments[i]+";"; //updated the assignment operator to get desired result
  }
  console.log(options.assignment);