我有以下代码,基本上是读取JSON文件,然后将其放入多维数组中。
let fs1 = require('fs');
let root1 = fs1.readFileSync('myFile.json');
let data1 = JSON.parse(root1);
for(index1 in data1){
for(index2 in data1[index1]){
console.log(index1)
console.log(index2)
console.log(data1[index1][index2])
myArray[index1][index2] = data1[index1][index2]
}
}
问题在于,即使在console.log中,myArray仍被JSON文件中的最后一个值填充到了所有位置。
我是JS,这很新,所以欢迎大家帮助:D
提前谢谢! 胡安
编辑:
终于解决了。问题出在myArray声明中。 之前是这样的:
let v = [];
for (i = 0; i < n ; i++){
v[i] = 0;
}
let myArray = [];
for (i = 0; i < n ; i++){
myArray[i]= v;
}
显然,所有这些都是通过引用完成的,因此我在读取data1时分配给myArray的最后一个值更新了所有这些值。 更改为:
let myArray = {};
for (i = 0; i < n ; i++){
myArray[i]= new Array();
}
for (i = 0; i < n ; i++){
for (j = 0; j < n ; j++){
myArray[i][j]= new Array();
}
}
这很好用(可能有更好的解决方案 初始化数组,而不是此单+双for循环)
再次感谢大家! :D
答案 0 :(得分:0)
我假设您正在尝试创建某种对象,其中包含一些数组?
如果是这样,您可以这样做吗?
在通读了一些评论之后,您遇到的问题是您继续覆盖myArrray[index1][index2]
的值,而应该执行类似我的解决方案的操作,或在外部循环中检查,看是否myArrray[index1]
,如果不是,则将其分配为数组或对象,然后担心其他键(也称为index2
)。
使用map
方法,至少您不必担心检查myArrray[index1]
是否是数组,因为map
只会返回一个数组。
const myArray = {};
// Object containing arrays example.
const dummyData1 = {
'array1': [1, 2, 3, 4],
'array2': [1, 2, 3, 4]
// etc...
};
Object.keys(dummyData1).forEach(key => {
myArray[key] = dummyData1[key].map(data => data);
});
console.log(myArray);
// Object containing objects example.
const dummyData2 = {
'object1': {
id: 1,
name: 'foo'
},
'object2': {
id: 2,
name: 'bar'
}
// etc...
};
Object.keys(dummyData2).forEach(key => {
myArray[key] = { ...dummyData2[key]};
});
console.log(myArray);
// Another example for the lols.
const dummyData3 = {
'arrayx': [1, 2, 3],
'arrayz': [4, 5, 6]
// etc...
};
Object.keys(dummyData3).forEach(key => {
myArray[key] = [...dummyData3[key]];
});
console.log(myArray);
考虑到您似乎无法理解第一个编码示例,说句公道,就像您说过的那样,您是JavaScript的新手,因此您可能可以理解其中的一些内容,因为它要熟悉得多你的例子。
const myArray = {};
const data1 = {
'array1': {
a: 1,
b: 2,
c: 3
},
'array2': {
d: 4,
e: 5,
f: 6
}
};
for (let index1 in data1) {
myArray[index1] = myArray[index1] || [];
for (let index2 in data1[index1]) myArray[index1].push(data1[index1][index2]);
}
console.log(myArray);
了解到您来自C ++背景,也许阅读诸如this之类的页面可能会有所帮助?
同样,您是JavaScript的新手,我不会对您的JavaScript技能或能力做任何假设。我本人最初是将Java作为第一语言学习的,所以在学习JavaScript回溯时有些困惑,例如class
那时还不算什么,您必须定义一个带有函数的类,没什么大不了的,但这只是这些 之一。