首页 > 解决方案 > 操作对象的数组值

问题描述

资格GroupingMap是一个包含家庭信息的对象。在后端,这些成员按照输入信息的顺序附加一个 NUMBER,并作为对 UI 的响应。我需要获取这些信息并以更有意义的方式显示它。像 SELF、SPOUSE、CHILD1、CHILD2 和 CHILD3

SELF 将始终附加 NUMBER 1。附加到成员的其余数字可能会根据输入信息的顺序而有所不同

我解决儿童编号的方法是:

如果配偶不存在或配偶 > CHILD 则 CHILD<NUMBER -1>

如果配偶存在且配偶 < CHILD 则 CHILD<NUMBER -2>

但我没有得到想要的结果。此代码也必须在ie9中呈现。所以我不能使用 es6 方法。

var eligibilityGroupingMap = {
  CHIP: ['CHILD5'],
  'APTC/CSR': ['SELF1', 'CHILD2', 'CHILD3', 'SPOUSE4']
};

var spouseExist = false;
var spouseIndex;
var valueToSubtract = 0;
var sortedMember = Object.keys(eligibilityGroupingMap).reduce(function(
  acc,
  key
) {
  //fetch the array for the given key
  var array = eligibilityGroupingMap[key];
  spouseExist = array.some(function(element) {
    if (element.indexOf('SPOUSE') >= 0) {
      spouseIndex = element.slice(-1);
    }
    return element.indexOf('SPOUSE') >= 0;
  });
  //console.log('spouseExist', spouseExist, spouseIndex);
  array.forEach(function(member) {
    console.log('member', member);
    if (member.indexOf('SPOUSE') < 0) {
      member.slice(-1) < spouseIndex ?
        (valueToSubtract = -1) :
        (valueToSubtract = -2);
    }
  });
  console.log('valueToSubtract', valueToSubtract);
  if (spouseExist) {
    eligibilityGroupingMap[key].map(function(member, index) {
      if (member.indexOf('CHILD') >= 0) {
        var memberIndex = member.slice(-1);
        memberIndex < spouseIndex ?
          (valueToSubtract = -1) :
          (valueToSubtract = -2);
      }
      member =
        member.slice(0, member.length - 1) + (memberIndex - valueToSubtract);
      console.log('member after update', member);
    });
  }

  var sortedArray = array.sort(function(firstValue, secondValue) {
    if (firstValue.indexOf('SELF') >= 0) return -1;
    if (secondValue.indexOf('SELF') >= 0) return 1;

    if (firstValue.indexOf('SPOUSE') >= 0) return -1;
    if (secondValue.indexOf('SPOUSE') >= 0) return 1;

    return 0;
  });

  //console.log('sortedArray', sortedArray);
  acc[key] = sortedArray;
  return acc;
}, {});
console.log('spouseExist', spouseExist, spouseIndex, valueToSubtract);
console.log('sortedMember', sortedMember);

预期结果:

var eligibilityGroupingMap = {
  CHIP: ['CHILD3'],
  'APTC/CSR': ['SELF1', 'CHILD1', 'CHILD2', 'SPOUSE4']
};

标签: javascript

解决方案


推荐阅读