javascript - 操作对象的数组值
问题描述
资格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']
};
解决方案
推荐阅读
- java - Spring Boot Web 应用程序如何验证另一个字段所需的表单字段?
- laravel-livewire - Laravel Livewire 搜索按钮而不是实时搜索
- php - 将 Ajax 结果传递到表 Codeigniter 的问题
- vuetify.js - 通过代码关闭 Vuetify v-data-table 中的展开行
- reactjs - findDOMNode 在 StrictMode 中已弃用
- firebase - 我可以为任何人应用写入规则来更新存储在 firebase rt 数据库中的对象中的特定项目吗?
- javascript - .after 不要读取 var 值
- php - 挣扎于 PHP 策略模式和接口继承
- ruby-on-rails - form_with 使用嵌套部分将表单内容呈现在元素表格,将内容渲染到表格行中
- shell - “Shell 命令语言”文档 - “令牌识别”部分中的反直觉句子