【问题标题】:map and filter with lodash 3.10.1使用 lodash 3.10.1 映射和过滤
【发布时间】:2017-06-19 22:48:20
【问题描述】:

我需要返回属性 visible 与 false 不同的对象数组的属性 label

例如:

 {
  "EMPRESA": "CMIP",
  "CD_MAQ": "EXE03",
  "DT_INI_MAQ": "1900-01-01",
  "DSP_MAQ": "EXE03",
  "DSR_MAQ": "EXE03",
  "RACIO_PARAGEM": null,
  "ID_MAGNITUDE": "101",
  "DT_INI_DM": "1900-01-01",
  "DT_FIM": null,
  "DT_RowId": "row_CMIPEXE031900-01-01",
  "DESIGEMPRESA": "CMIP",
  "DSP_MAGNITUDE": "Metros"
}

以及对象数组:

var tableColumns=  [
            {
                "targets": 0,
                "title": "", //Datatables
                "label": "", //Editor
                "data": 'EMPRESA',
                "name": 'EMPRESA',
                "width": "",
                "type": "hidden", //Editor
                "visible": false, //DataTables
                "defaultContent": "",
                "bSearchable": false,
                "orderable": false
            }, {....

我已经设置了一个小提琴。提前致谢。 https://jsfiddle.net/2ev7fjqh/

【问题讨论】:

    标签: object dictionary filter functional-programming lodash


    【解决方案1】:

    我需要返回属性visiblefalse 不同的对象数组的属性label

    const data = [
      { label: 'A', visible: false },
      { label: 'B', visible: true },
      { label: 'C', visible: true },
      { label: 'D', visible: false },
      { label: 'E', visible: true }
    ]
    
    const result =
      data
        .filter(x => x.visible !== false)
        .map(x => x.label)
        
    console.log(result)
    // [ 'B', 'C', 'E' ]

    上面多次遍历数据。如果你想避免这种情况,你可以转导

    const data = [
      { label: 'A', visible: false },
      { label: 'B', visible: true },
      { label: 'C', visible: true },
      { label: 'D', visible: false },
      { label: 'E', visible: true }
    ]
    
    const mapper = f =>
      k => (acc, x) => k (acc, f (x))
      
    const filterer = p =>
      k => (acc, x) => p (x) ? k (acc, x) : acc
      
    const tcomp = (tf, tg) =>
      k => tf (tg (k))
      
    const concat = (xs, ys) =>
      xs.concat(ys)
      
    const transduce = (...ts) => xs =>
      xs.reduce (ts.reduce (tcomp, k => k) (concat), [])
      
    const visibleLabels =
      transduce (filterer (x => x.visible !== false),
                 mapper (x => x.label))
                
    console.log (visibleLabels (data))
    // [ 'B', 'C', 'E' ]

    【讨论】:

    • 这是完美的数据 .filter(x => x.visible !== false) .map(x => x.label) 但如果是 != undefined 我想返回标签跨度>
    猜你喜欢
    • 2021-05-21
    • 2020-02-25
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 2020-06-16
    • 2015-10-20
    • 2021-07-14
    • 2017-08-23
    相关资源
    最近更新 更多