我刚刚开始学习JS。现在,我遇到了问题,找不到博客或教程可以提供很大帮助,或者我没有明白他们的观点!
我的代码在这里:
let lines = fs.readFileSync(inGff).toString().split("\n");
...
let column = lines[i].toString().split("\t");
id = clpP1_69910 or clpP1_54343 or clpP1_69554 ...
obj[id] = column; //only work for one key to one array.
实际上。我可以使用Perl轻松做到:
push @{$obj{$id}}, [@info]
不确定JS中是否有类似的工具或更高级的工具。欢迎任何建议。谢谢!
答案 0 :(得分:0)
您可以像这样在对象内部存储数组:
let data = {};
let keys = ['clpP1_69910', 'clpP1_69915', 'clpP1_69920', 'clpP1_69925'];
// Iterate keys
keys.forEach(el => {
let arr = [];
// Iterate to push array items
for (let i = 0; i < 10; i++) {
arr.push(i);
}
// Assign array to key
data[el] = arr;
// Clear array
arr = null;
});
console.log(data);
答案 1 :(得分:0)
要解决此问题,添加列时,应将clpP1_69910
设置为空的Array
,并将.push
设置为数组。
obj[clpP1_69910] = []
const lines = fs.readFileSync(inGff).toString().split('\n')
const columns = lines.map(line => line.toString().split('\t'))
columns.forEach(column => obj[clpP1_69910].push(column))
或者,简称:
obj[clpP1_69910] = fs.readFileSync(inGff).toString().split('\n').map(line => line.toString().split('\t')).reduce((acc, cur) => acc.concat(cur), [])
最后一部分.reduce
部分展平数组数组,返回所有列。