为了账号安全,请及时绑定邮箱和手机立即绑定

使用三元运算符一行使用 JAVASCRIPT REDUCE 构建 2 个数组的数组

使用三元运算符一行使用 JAVASCRIPT REDUCE 构建 2 个数组的数组

慕桂英4014372 2021-09-30 15:31:46
假设我有一个对象数组const companyList = [    {        name: 'amazon',        isIntermediary: false    },    {        name: 'microsoft',        isIntermediary: false    },    {        name: 'talentsearch',        isIntermediary: true    },    {        name: 'talent global',        isIntermediary: true    },    {        name: 'taleo',        isIntermediary: true    }];我想创建 2 个数组。我可以使用reduceconst companies = companyList.reduce(    (acc, curr) => {        if (!curr.isIntermediary) {            acc[0].push(curr);        } else {            acc[1].push(curr);        }        return acc;    },    [[], []]);有没有办法重构此代码以改用三元运算符并使其成为单行代码?我正在努力这样做...感谢您的帮助!
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

Boolean 转换为 Number 变为 0 或 1,可以使用逗号运算符将其缩短:


const companyList = [ { name: 'amazon',        isIntermediary: false },

                      { name: 'microsoft',     isIntermediary: false },

                      { name: 'talentsearch',  isIntermediary: true  },

                      { name: 'talent global', isIntermediary: true  },

                      { name: 'taleo',         isIntermediary: true  } ]

                      

const companies = companyList.reduce((a, v) => (a[+v.isIntermediary].push(v), a), [[], []])


console.log(companies)


查看完整回答
反对 回复 2021-09-30
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

它并不是最易读的单行,但我认为这正是您所要求的。


const companyList = [{

    name: 'amazon',

    isIntermediary: false

  },

  {

    name: 'microsoft',

    isIntermediary: false

  },

  {

    name: 'talentsearch',

    isIntermediary: true

  },

  {

    name: 'talent global',

    isIntermediary: true

  },

  {

    name: 'taleo',

    isIntermediary: true

  }

];


const companies = companyList.reduce((acc, c) => c.isIntermediary ? [acc[0], [...acc[1], c]] : [[...acc[0], c], acc[1]], [[], []]);


console.log(companies)


查看完整回答
反对 回复 2021-09-30
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

通过您的代码,这就是您想要的(使用三元来选择是 index0还是1)


const companyList = [

    {

        name: 'amazon',

        isIntermediary: false

    },

    {

        name: 'microsoft',

        isIntermediary: false

    },

    {

        name: 'talentsearch',

        isIntermediary: true

    },

    {

        name: 'talent global',

        isIntermediary: true

    },

    {

        name: 'taleo',

        isIntermediary: true

    }

];


const companies = companyList.reduce(

    (acc, curr) => [!curr.isIntermediary ? [...acc[0], curr] : [...acc[0]], curr.isIntermediary ? [...acc[1], curr] : [...acc[1]]],

    [[], []]

);


console.log(companies)


查看完整回答
反对 回复 2021-09-30
  • 3 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信