编号对象数组中的对象

时间:2017-05-03 20:07:34

标签: javascript arrays ecmascript-6

我有一个对象数组:

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

但它并不完全存在。任何正确方向的指导都将受到赞赏。

1 个答案:

答案 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; }