我有一个对象数组:
let _arr =[{obj_num: 1.1}, {obj_num: 1.5}, {obj_num: 4}, {obj_num: 3.1}, {obj_num: 3.3}];
我需要根据小数的两边来命令他们的数字,即:
let _arr =[{obj_num: 1.1}, {obj_num: 1.2}, {obj_num: 2}, {obj_num: 3.1}, {obj_num: 3.2}];
对象按小数中的第一个数字分组:所以1.1& 1.2属于对象组1.
obj_num
中没有小数点的对象属于他们自己的组。
对象需要根据其组按顺序编号。
因此,如果obj_num:1.1和obj_num:1.3属于第1组,它们应该变为1.1和1.2。
如果对象编号为1.1,1.3,2,4.3,则需要成为1.1,1.2,2,3.1。
我很难过,并且认为我是在一个小山丘上建造一座山。
我现在正在尝试:
this.data.questions =[{question_num: 1.1}, {question_num: 1.5}, {question_num: 4}, {question_num: 3.1}, {question_num: 3.3}];
let _normalQuestionRef = 0;
let _questionRef = {
totalObjs: _arr.length,
objects: {},
};
// Create a reference object that groups questions by the number before the decimal
this.data.questions.forEach((_q, _i) => {
let _qNum = _q.question_num.split('.')[0];
_questionRef.questions[`question_${_qNum}`] = _questionRef.questions[`question_${_qNum}`] || [];
_questionRef.questions[`question_${_qNum}`].push({
index: _i,
q: _q,
});
});
// Re-populate the original array
Object.keys(_questionRef.questions).forEach((_qRef) => {
let _qSet = _questionRef.questions[_qRef];
// Increment the base question number
_normalQuestionRef ++;
// If there are questions with a decimal point number
if (_qSet.length > 1) {
// Loop each decimal point and place it in the specified index of the array
_qSet.forEach((_q, i) => {
_q.q.question_num = _normalQuestionRef + '.' + String(i + 1);
this.data.questions[_q.index] = _q;
});
} else {
// Just add it as is
_qSet[0].q.question_num = _normalQuestionRef;
this.data.questions[_qSet[0].index] = _qSet[0].q;
};
});
但它并不完全存在。任何正确方向的指导都将受到赞赏。
答案 0 :(得分:2)
您可以保存组中的最后一个值,新组值和偏移量。
var array = [1.1, 1.5, 4, 3.1, 3.3],
result = array.map(((last, group, offset) => a => {
offset += 0.1;
if (Math.floor(last) !== Math.floor(a)) {
group++;
offset = a === Math.floor(a) ? 0 : 0.1;
}
last = a;
return group + offset;
})(0, 0, 0));
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }