因此,我有一个名为“ 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,然后正确停止。因此,我的循环工作得非常好,除非要设置变量的值。
有什么想法吗?
谢谢
答案 0 :(得分:5)
for (var i = 0; i < options.data.assignments.length; i++) {
options.data.assignment = options.data.assignments[i];
}
将循环3次:
options.data.assignment = options.data.assignments[0]
-> options.data.assignment='involved'
options.data.assignment = options.data.assignments[1]
-> options.data.assignment='assignee'
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);
}
如您所见,我的作业正在更改
答案 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);