猿问

如何使用 lodash keyBy 创建哈希对象?

我有这样的学校数据:


[

  {

    "details": {

      "campus": [

        {

          "address": "115-119...",

          "campusName": "blah",

          "email": "blah",

        }

      ],

      "colour": "#640E27",

      "schoolCode": "8383"

    },

    "enrolled": true,

    "id": "8383"


  }

]

我需要创建一个以学校 ID 作为键,以学校颜色作为其值的哈希


    {'8383' : '#640E27'}

我正在使用 lodash


  const hash = keyBy(action.payload, 'id');

  const reducedHash = pickBy(hash, item => item.details.colour);

但是,输出仍然具有整个对象的值,而不仅仅是显示颜色值。


如何实现 id 和 color 作为 hash 的键值?


POPMUISE
浏览 147回答 3
3回答

收到一只叮咚

lodash keyBy 可能不是您用例的最佳解决方案,您可以使用array.reduce方法:action.payload.reduce((accumulator, currentValue) => {  accumulator[currentValue.id] = currentValue.details.colour;  return accumulator;}, {});

拉风的咖菲猫

你可以试试这段代码,Array.reduce 也能做同样的工作。 let arr = [    {      details: {        campus: [          {            address: '115-119...',            campusName: 'blah',            email: 'blah',          },        ],        colour: '#640E27',        schoolCode: '8383',      },      enrolled: true,      id: '8383',    },  ];  const reducedHash = arr.reduce((acc, data) => {    return { ...acc, ...{ [data.id]: data.details.colour } };  }, {});

白衣染霜花

使用.forEach或.reducevar data = [  {    "details": {      "campus": [        {          "address": "115-119...",          "campusName": "blah",          "email": "blah",        }      ],      "colour": "#640E27",      "schoolCode": "8383"    },    "enrolled": true,    "id": "8383"  }];var res = {};data.forEach(({id, details})=>{ res[id] = details.colour});console.log(res);//Reducevar res2 = data.reduce((acc, {id, details})=>{  return {...acc, ...{[id]:details.colour}}}, {});   console.log(res2)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答