как хранить множество массивов под одним ключом - PullRequest
0 голосов
/ 06 июля 2018

Я только недавно начал изучать 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. Любые предложения приветствуются. Спасибо!

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Ключи могут хранить значения любого типа

Чтобы решить эту проблему, вы должны установить 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, выравнивает массив массивов, возвращая все столбцы.

0 голосов
/ 06 июля 2018

Вы можете хранить массивы внутри объектов следующим образом:


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);
...