Создайте скользящий массив из массива массивов с помощью es6. - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть набор данных, подобный таковому.

this.data = [[opens, opens, opens, etc],
  [closes, closes, closes, etc],
  [highs, highs, highs, etc],
  [lows, lows, lows, etc]]

У меня есть функция, которая захватывает первый элемент каждого массива и возвращает один массив, например

[opens, closes, highs, lows]

Мне нужна функция для фактического создания скользящего окна, так что это похоже на

[opens, closes, highs, lows],
[opens, closes, highs, lows], 
[opens, closes, highs, lows],
[opens, closes, highs, lows], 
[opens, closes, highs, lows],

В этом примере предположим, что я хотел получить последние 4 и текущие.

Функция использует уменьшение.Какой синтаксис мне нужно заменить, чтобы уменьшить на?

const candle = this.data.reduce(
    (array, item) => [...array, item[index]],
    []
  );

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

Вы можете сначала повернуть данные, а затем взять подмножество.

var data = [['opens0', 'opens1', 'opens2', 'opens3', 'opens4', 'opens5'], ['closes0', 'closes1', 'closes2', 'closes3', 'closes4', 'closes5'], ['highs0', 'highs1', 'highs2', 'highs3', 'highs4', 'highs5'], ['lows0', 'lows1', 'lows2', 'lows3', 'lows4', 'lows5']],
    rotated = data.reduce((r, a) => a.map((v, i) => [...(r[i] || []), v]), []);
    
console.log(rotated);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 09 февраля 2019

Может быть, вы можете сделать это, если вы все еще хотите использовать reduce():

const data = [
  ["opens", "opens", "opens"],
  ["closes", "closes", "closes"],
  ["highs", "highs", "highs"],
  ["lows", "lows", "lows"]
];

let res = data.reduce((acc, list, idx, arr) =>
{
    if (idx >= list.length)
        return acc;

    return [...acc, arr.map(x => x[idx])];
}, []);

console.log(res);
0 голосов
/ 09 февраля 2019

Поскольку вы хотите получить вложенный массив , вам нужно сначала выполнить итерацию по подмассивам, а не по внешнему массиву .data.Я бы использовал два .map s:

const data = [['opens', 'opens', 'opens'],
  ['closes', 'closes', 'closes'],
  ['highs', 'highs', 'highs'],
  ['lows', 'lows', 'lows']];
const candles = data[0].map((_, i) => data.map(subarr => subarr[i]));
console.log(candles);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...