【问题标题】:Array filter data in javascriptjavascript中的数组过滤数据
【发布时间】:2019-04-17 08:19:33
【问题描述】:

我有使用 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],      
];

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: javascript arrays json filter lodash


【解决方案1】:

您可以使用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 的答案是一个更好的选择)

【讨论】:

  • 我遇到过这种类型的错误:TypeError: arr.map(...).flat is not a function ......这种方式运行良好: inputData.map(arr => arr.map(data => data['Tempe(C)']));
  • @ragu flat 在您的浏览器中不受支持。用另一个选项更新
  • 这种方式也很好用:inputData.map(arr => arr.map(a => Object.values(a)[0]))
【解决方案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)

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-07
        • 1970-01-01
        • 1970-01-01
        • 2015-11-29
        • 2022-08-17
        • 2020-02-24
        • 2018-03-22
        相关资源
        最近更新 更多