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

问题描述 投票:0回答:3

嗨,我有这样的学校数据:

[
  {
    "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作为哈希的键值?

javascript lodash
3个回答
1
投票

lodash keyBy可能不是您的用例的最佳解决方案,而是可以使用array.reduce方法:

action.payload.reduce((accumulator, currentValue) => {
  accumulator[currentValue.id] = currentValue.details.colour;
  return accumulator;
}, {});

0
投票

您可以尝试使用此代码,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 } };
  }, {});

0
投票

使用.forEach.reduce

var 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);

//Reduce

var res2 = data.reduce((acc, {id, details})=>{
  return {...acc, ...{[id]:details.colour}}
}, {});

   console.log(res2)
© www.soinside.com 2019 - 2024. All rights reserved.