ES6:flatMap方法替代.filter().map()

123 阅读1分钟
    const arr = [
      {
        code: 1,
        name: '1',
        need: true
      },
      {
        code: 2,
        name: '2'
      },
      {
        code: 3,
        name: '3',
        need: true
      },
      {
        code: 4,
        name: '4'
      },
    ]

当我们遇到arr这样的数据结构,需要过滤掉need不为true的属性,并且返回的对象中code和name分别改为value和label

这还不简单?

上filter和map

    const list = arr.filter(n => n.need).map(n => ({
      value: n.code,
      label: n.name
    }))

但是,这样不就循环了2次arr了嘛?

上reduce

    const list1 = arr.reduce((finalList, n) => {
      if (n.need)
        finalList.push({
          value: n.code,
          label: n.name
        })
      return finalList
    }, [])

这样就可以在一个循环中处理完数据结构了,还可以使用flatMap方法

    const list2 = arr.flatMap(n => n.need ? {
      value: n.code,
      label: n.name
    } : [])