Фильтр данных массива в JavaScript - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть фильтр рабочего массива с использованием javascript и lodash. Я хочу преобразовать массив массива в один массив. Кто угодно может подсказать, конвертирует в один массив.

Входные данные

const inputData = [
  [
    { 'Tempe(C)': 12 },
    { 'Tempe(C)': 13 },
    { 'Tempe(C)': 14 },
    { 'Tempe(C)': 15 }
  ],
  [
    { 'Tempe(C)': 22 },
    { 'Tempe(C)': 23 },
    { 'Tempe(C)': 24 },
    { 'Tempe(C)': 25 }
  ],
  [
    { 'Tempe(C)': 32 },
    { 'Tempe(C)': 33 },
    { 'Tempe(C)': 34 },
    { 'Tempe(C)': 35 }
  ],
];

Я хочу эту структуру вывода

const outputData = [
  [12, 13, 14, 15],
  [22, 23, 24, 25],
  [32, 33, 34, 35],      
];

Ответы [ 4 ]

4 голосов
/ 17 апреля 2019

Вы можете использовать Object.values и map

const inputData = [[{"Tempe(C)":12},{"Tempe(C)":13},{"Tempe(C)":14},{"Tempe(C)":15}],[{"Tempe(C)":22},{"Tempe(C)":23},{"Tempe(C)":24},{"Tempe(C)":25}],[{"Tempe(C)":32},{"Tempe(C)":33},{"Tempe(C)":34},{"Tempe(C)":35}]];
const output = inputData.map(arr => arr.map(a => Object.values(a)[0]))
console.log(output)

Если в вашем браузере поддерживается flat:

const inputData = [[{"Tempe(C)":12},{"Tempe(C)":13},{"Tempe(C)":14},{"Tempe(C)":15}],[{"Tempe(C)":22},{"Tempe(C)":23},{"Tempe(C)":24},{"Tempe(C)":25}],[{"Tempe(C)":32},{"Tempe(C)":33},{"Tempe(C)":34},{"Tempe(C)":35}]]
const output = inputData.map(arr => arr.map(Object.values).flat())

console.log(output)

(Это работает для любой клавиши. Если ключ всегда Tempe(C), ответ @ eol является гораздо лучшим вариантом)

2 голосов
/ 17 апреля 2019

Если Tempe(C) всегда является ключом для значений, вы можете просто сделать:

const inputData=[[{"Tempe(C)":12},{"Tempe(C)":13},{"Tempe(C)":14},{"Tempe(C)":15}],[{"Tempe(C)":22},{"Tempe(C)":23},{"Tempe(C)":24},{"Tempe(C)":25}],[{"Tempe(C)":32},{"Tempe(C)":33},{"Tempe(C)":34},{"Tempe(C)":35}]];

const output = inputData.map(arr => arr.map(data => data['Tempe(C)']));

console.log(output)
0 голосов
/ 17 апреля 2019

С lodash вы можете использовать вложенные _.map() вызовы для получения результата:

const data = [[{"Tempe(C)":12},{"Tempe(C)":13},{"Tempe(C)":14},{"Tempe(C)":15}],[{"Tempe(C)":22},{"Tempe(C)":23},{"Tempe(C)":24},{"Tempe(C)":25}],[{"Tempe(C)":32},{"Tempe(C)":33},{"Tempe(C)":34},{"Tempe(C)":35}]]

const result =  _.map(data, o => _.map(o, 'Tempe(C)'))

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

И та же идея, используя lodash / fp :

const fn = _.map(_.map('Tempe(C)'))

const data = [[{"Tempe(C)":12},{"Tempe(C)":13},{"Tempe(C)":14},{"Tempe(C)":15}],[{"Tempe(C)":22},{"Tempe(C)":23},{"Tempe(C)":24},{"Tempe(C)":25}],[{"Tempe(C)":32},{"Tempe(C)":33},{"Tempe(C)":34},{"Tempe(C)":35}]]

const result = fn(data)

console.log(result)
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>
0 голосов
/ 17 апреля 2019

Привет, Рагу, вот как можно достичь желаемого результата:

var inputData = [
    [
      { 'Tempe(C)': 12 },
      { 'Tempe(C)': 13 },
      { 'Tempe(C)': 14 },
      { 'Tempe(C)': 15 }
    ],
    [
      { 'Tempe(C)': 22 },
      { 'Tempe(C)': 23 },
      { 'Tempe(C)': 24 },
      { 'Tempe(C)': 25 }
    ],
    [
      { 'Tempe(C)': 32 },
      { 'Tempe(C)': 33 },
      { 'Tempe(C)': 34 },
      { 'Tempe(C)': 35 }
    ],
  ];

var newstructure = [];

for(var i in inputData){
    newstructure[i] = [];
    for(var j in inputData[i]){
        newstructure[i][j] = inputData[i][j]["Tempe(C)"];
    }
}


...