如何将多个数组存储到一个键

时间:2018-07-06 09:20:21

标签: javascript arrays key associative

我刚刚开始学习JS。现在,我遇到了问题,找不到博客或教程可以提供很大帮助,或者我没有明白他们的观点!

我的问题是如何将多个数组存储到一个键中: enter image description here

我的代码在这里:

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中是否有类似的工具或更高级的工具。欢迎任何建议。谢谢!

enter image description here

2 个答案:

答案 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部分展平数组数组,返回所有列。