【问题标题】:ES6: Object ManipulationES6:对象操作
【发布时间】:2022-11-25 22:16:46
【问题描述】:

要求是我必须按键“taxGrp”进行分组。 “taxtGrp”应包含“姓名”和“收入”。 “收入”只不过是该组的总收入 如果 taxGrp 是 NON_TAX' 那么 name = 'members' 和 income = 1000(根据下面的示例数据) 如果 taxGrp 不是“NON_TAX”,则 name = 该组中“关系”为“CHILD”的人的姓名,收入值是该组的合并收入。 我做不到。获得所需的输出。

var grp = [
{
    taxGrp: 'NON_TAX',
  name: 'Mary Zelle',
  relation: 'APPLICANT',
  income:  '500'
},
{
  taxGrp: 'NON_TAX',
  name: 'Jack Zelle',
  relation: 'SPOUSE',
  income:  '500'
},
{
    taxGrp: 'TAX_GRP_1',
  name: 'Victor Zele',
  relation: 'CHILD',
  income: 200
},
{
    taxGrp: 'TAX_GRP_1',
  name: 'Rosey Zele',
  relation: 'DEPENDANT',
  income: 100

},
{
    taxGrp: 'TAX_GRP_2',
  name: 'Derk Zele',
  relation: 'CHILD',
  income: 300
},
{
    taxGrp: 'TAX_GRP_2',
  name: 'Marc Zele',
  relation: 'DEPENDANT',
  income: null
}
];

预期输出:

[
'NON_TAX': {
   name: 'members'
   income:  1000
},
'TAX_GRP_1': {
   name: 'Victor Zele',
   income:  400
},
'TAX_GRP_2': {
   name: 'Derk Zele',
   income:  300
}
]

var grp = [
{
    taxGrp: 'NON_TAX',
  name: 'Mary Beth',
  relation: 'PARENT'
},
{
    taxGrp: 'TAX_GRP_1',
  name: 'Victor Zele',
  relation: 'CHILD'
},
{
    taxGrp: 'TAX_GRP_1',
  name: 'Rosey Zele',
  relation: 'DEPENDANT'
},
{
    taxGrp: 'TAX_GRP_2',
  name: 'Derk Zele',
  relation: 'CHILD'
},
{
    taxGrp: 'TAX_GRP_2',
  name: 'Marc Zele',
  relation: 'DEPENDANT'
}
];

var memberObj = grp.reduce((acc, val) => {
  acc[val.taxGrp] = {
    name: val.name
  };
  return acc
}, {});

console.log('memberObj >>', memberObj);

【问题讨论】:

  • 为什么是这个问题。给予-ve投票?
  • 预期输出不是有效的 JS。
  • 如果您希望输出包含 income: ...,为什么不将输入包含在您在 reducer 函数中分配的值中?
  • @Quentin——无法增加收入。
  • 什么事拦住你了?它只是val的属性,就像name一样。

标签: javascript ecmascript-6


【解决方案1】:

一些问题:

  • income 的输入是混合类型:有时是字符串,有时是数字。这应该被协调。
  • 您的代码没有尝试访问income,假设输出将包含与其相关的任何内容
  • 输出格式无效。数组文字表示法不允许命名属性,如“NON_TAX”。我假设你实际上不想要一个数组,而是一个普通的对象
  • 您的代码没有尝试为具有 relation 的对象赋予特殊角色,即“CHILD”。您应该只在 name 为真或 taxGrp 为“NON_TAX”时设置该属性

这是您的 reduce 回调,考虑到以上几点:

var grp = [{taxGrp: 'NON_TAX',name: 'Mary Zelle',relation: 'APPLICANT',income:  '500'},{taxGrp: 'NON_TAX',name: 'Jack Zelle',relation: 'SPOUSE',income:  '500'},{taxGrp: 'TAX_GRP_1',name: 'Victor Zele',relation: 'CHILD',income: 200},{taxGrp: 'TAX_GRP_1',name: 'Rosey Zele',relation: 'DEPENDANT',income: 100},{taxGrp: 'TAX_GRP_2',name: 'Derk Zele',relation: 'CHILD',income: 300},{taxGrp: 'TAX_GRP_2',name: 'Marc Zele',relation: 'DEPENDANT',income: null}];

var memberObj = grp.reduce((acc, val) => {
  acc[val.taxGrp] ??= { income: 0 };
  if (val.taxGrp === "NON_TAX" || val.relation == "CHILD") {
    acc[val.taxGrp].name = val.taxGrp === "NON_TAX" ? "members" : val.name;
  }
  acc[val.taxGrp].income += +val.income;
  return acc;
}, {});

console.log('memberObj >>', memberObj);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多