JavaScript中的数组过滤器数据

时间:2019-04-17 08:19:33

标签: javascript arrays json filter lodash

我有使用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 个答案:

答案 0 :(得分:4)

您可以使用Object.valuesmap

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的答案是更好的选择)

答案 1 :(得分:2)

如果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)

答案 2 :(得分:0)

嗨,拉古(Ragu),这是您如何获得想要的结果的方法:

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)"];
    }
}


答案 3 :(得分:0)

使用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>