Javascript 循环之后,数据不是预期的
这里可能遗漏了一些非常明显的东西,但花了很长时间进行测试,无法弄清楚到底发生了什么 我试图遍历数组(dataArray)中的每个项,将其拆分并放入临时数组中。然后遍历这个临时数组,使用另一个数组中的一些列名(columnNames)创建一个临时对象。然后将此临时对象推送到对象(产品)数组中 这很好,我在最后得到的数组包含正确数量的对象,但它们都是相同的对象(最后一个被处理的对象)。当我在console.log中记录每个tempObj时,我可以看到它们是不同的,但由于某些原因,这并没有反映在最终的数组中 有什么想法吗Javascript 循环之后,数据不是预期的,javascript,arrays,node.js,Javascript,Arrays,Node.js,这里可能遗漏了一些非常明显的东西,但花了很长时间进行测试,无法弄清楚到底发生了什么 我试图遍历数组(dataArray)中的每个项,将其拆分并放入临时数组中。然后遍历这个临时数组,使用另一个数组中的一些列名(columnNames)创建一个临时对象。然后将此临时对象推送到对象(产品)数组中 这很好,我在最后得到的数组包含正确数量的对象,但它们都是相同的对象(最后一个被处理的对象)。当我在console.log中记录每个tempObj时,我可以看到它们是不同的,但由于某些原因,这并没有反映在最终的
var tempArray = [],
tempObj = {};
//run through each row if there is data
if (dataArray != null || dataArray != []) {
try {
for (var i = 0; i < dataArray.length; i++) {
//split row by ','
tempArray = dataArray[i].split(',');
for (var y = 0; y < tempArray.length; y++) {
tempObj[columnNames[y]] = tempArray[y];
//onsole.log(tempObj[columnNames[y]]);
}
console.log(tempObj);
products[i] = tempObj;
}
} catch (e) {
console.error(e);
} finally {
console.log(products);
console.log("Seperated into " + products.length + " products...");
ProductUpdater(products, merchantID)
}
}
}
var tempArray=[],
tempObj={};
//如果有数据,则遍历每一行
如果(dataArray!=null | | dataArray!=[]){
试一试{
对于(var i=0;i
注意:以及使用“products[i]=tempObj”将其添加到我尝试过的数组中。没有运气的情况下推。通过斜视找到了答案: 必须将tempObj的声明移动到第一个for循环中
var tempArray = [];
//run through each row if there is data
if (dataArray != null || dataArray != []) {
try {
for (var i = 0; i < dataArray.length; i++) {
var tempObj = {};
//split row by ','
tempArray = dataArray[i].split(',');
for (var y = 0; y < tempArray.length; y++) {
tempObj[columnNames[y]] = tempArray[y];
//onsole.log(tempObj[columnNames[y]]);
}
//console.log(tempObj.ean);
products[i] = tempObj;
}
} catch (e) {
console.error(e);
} finally {
console.log(products);
console.log("Seperated into " + products.length + " products...");
ProductUpdater(products, merchantID)
}
}
var tempArray=[];
//如果有数据,则遍历每一行
如果(dataArray!=null | | dataArray!=[]){
试一试{
对于(var i=0;i
您一直在重复使用和更新相同的tempObj
。为要添加到阵列中的每个对象创建不同的对象。JS从不在赋值时复制复合数据类型(对象和数组)。它只复制对数据的引用。谢谢-trickYou在这个测试dataArray!=[]
因为[]=[]
是false
,因为它们不是相同的对象。如果你想检查<代码>数据数组< /C>是空的,然后检查<代码>长度>代码>,你可能想考虑它是否适合<代码>数据阵列< /> >也可以做<代码> var TEMPAROR= DATALARD[i]。code>也是,因为它在外部作用域中并不需要(而且拆分将使它在该外部作用域中无用)
var tempArray = [];
//run through each row if there is data
if (dataArray != null || dataArray != []) {
try {
for (var i = 0; i < dataArray.length; i++) {
var tempObj = {};
//split row by ','
tempArray = dataArray[i].split(',');
for (var y = 0; y < tempArray.length; y++) {
tempObj[columnNames[y]] = tempArray[y];
//onsole.log(tempObj[columnNames[y]]);
}
//console.log(tempObj.ean);
products[i] = tempObj;
}
} catch (e) {
console.error(e);
} finally {
console.log(products);
console.log("Seperated into " + products.length + " products...");
ProductUpdater(products, merchantID)
}
}