我正在尝试获取用户输入并将值推入数组。但是数组只是将最后输入的值复制到所有先前的值。不知道我要去哪里错了。
var arrTest = [];
var objTest = {};
var inputName = prompt("Enter name");
var inputValue = prompt("Enter value");
while (inputName.length > 0 && inputValue > 0) {
objTest.name = inputName;
objTest.value = inputValue;
arrTest.push(objTest);
inputName = prompt("Enter name");
inputValue = prompt("Enter value");
}
printDetails(arrTest);
}
function printDetails(arrN){
var vOutput = ""
for(var vIndex = 0; vIndex < arrN.length ; vIndex++){
vOutput = vOutput +" Name: " + arrN[vIndex].name+ " Value :" + dogN[vIndex].value+ ";
}
document.getElementById("output").innerHTML=vOutput;
}
如果仅输入1个值测试1,则输出为
名称:测试值:1
如果仅输入2个值,则测试1,最好的2个输出为
名称:最佳价值:2 名称:最佳价值:2
我的期望值应该是:
名称:测试值:1 名称:最佳价值:2
我在做什么错了?
答案 0 :(得分:1)
您应该改用arrTest.push(objTest)。
此外,在while循环中声明objTest。
代码将为
var arrTest = [];
var inputName, inputValue;
for (let i=0; i<3; i++) {
// Here should be the declaration
var objTest = {};
// User input
inputName = prompt("Enter name");
inputValue = prompt("Enter value");
objTest.name = inputName;
objTest.value = inputValue;
arrTest.push(objTest);
}
printDetails(arrTest);
function printDetails(arrN){
let vOutput = "";
for(let vIndex = 0; vIndex < arrN.length ; vIndex++){
vOutput = vOutput +" Name: " + arrN[vIndex].name+ " Value :" + arrN[vIndex].value+ "\n";
}
console.log(vOutput);
}
答案 1 :(得分:1)
观察到这种行为的原因是,当您调用arrTest.push(objTest)
时,实际上是在向数组添加对象的引用,而不是对象本身。然后,当您更改对象并再次将其推入时,您将向该对象添加另一个引用,该引用仅包含更新后的值。
您可以通过完全不使用变量来解决此问题:
while (inputName.length > 0 && inputValue > 0) {
arrTest.push({ name: inputName, value: inputValue });
inputName = prompt("Enter name");
inputValue = prompt("Enter value");
}
您可以在循环内定义对象,这样您就不会在引用的对象上工作:
while (inputName.length > 0 && inputValue > 0) {
const objTest = {}
objTest.name = inputName;
objTest.value = inputValue;
arrTest.push(objTest);
inputName = prompt("Enter name");
inputValue = prompt("Enter value");
}
使用新的传播语法,您甚至可以实现类似的操作,在其中您可以使用变量,在循环之外定义它,但仍然不使用像这样的引用:
while (inputName.length > 0 && inputValue > 0) {
objTest.name = inputName;
objTest.value = inputValue;
arrTest.push({ ...objTest });
inputName = prompt("Enter name");
inputValue = prompt("Enter value");
}
答案 2 :(得分:0)
我已经重写了一些代码。试试这个。
var arrTest = [];
var objTest = {};
var inputName = prompt("Enter name");
var inputValue = prompt("Enter value");
while (inputName.length > 0 && inputValue.length > 0) {
var objTest = {};
objTest.name = inputName;
objTest.value = inputValue;
arrTest.push(objTest);
inputName = prompt("Enter name");
inputValue = prompt("Enter value");
}
printDetails(arrTest);
function printDetails(arrN){
console.log(arrN)
/* do for loop */
}