按值和顺序确定数组

时间:2017-08-17 10:26:00

标签: javascript

给定一个始终包含twothree值的数组。我需要确定最大值的索引并向其添加属性,例如main。然后,根据订单设置left到第一个小值,right到第二个小值。 (小心array6

必须始终有一个main

很容易确定最大的价值,如:

var array1   = [0.25, 0.75];        // desired result: ['left', 'main']
var array2   = [0.75, 0.25];        // desired result: ['main', 'right']
var array3   = [0.25, 0.50, 0.25];  // desired result: ['left', 'main', 'right']
var array4   = [0.50, 0.25, 0.25];  // desired result: ['main', 'left', 'right']
var array5   = [0.25, 0.25, 0.50];  // desired result: ['left', 'right', 'main']
var array6   = [0.40, 0.10, 0.50];  // desired result: ['left', 'right', 'main']
var array7   = [0.50, 0.50];        // desired result: ['left', 'main']


index1 = array1.indexOf(Math.max.apply( Math, array1 ));
index2 = array2.indexOf(Math.max.apply( Math, array2 ));
index3 = array3.indexOf(Math.max.apply( Math, array3 ));
index4 = array4.indexOf(Math.max.apply( Math, array4 ));
index5 = array5.indexOf(Math.max.apply( Math, array5 ));
index6 = array6.indexOf(Math.max.apply( Math, array6 ));

console.log(
    'index1: ', index1,
    'index2: ', index2,
    'index3: ', index3,
    'index4: ', index4,
    'index5: ', index5,
    'index6: ', index6
);

但是,如果不使用现在的100 if else来确定,我怎样才能实现其余的预期结果呢?

更新 数组值的总和将始终为1

3 个答案:

答案 0 :(得分:1)

在这里,我写了一个函数,用最小的if...else

来解决你的目的

var array1   = [0.25, 0.75];        // desired result: ['left', 'main']
var array2   = [0.75, 0.25];        // desired result: ['main', 'right']
var array3   = [0.25, 0.50, 0.25];  // desired result: ['left', 'main', 'right']
var array4   = [0.50, 0.25, 0.25];  // desired result: ['main', 'left', 'right']
var array5   = [0.25, 0.25, 0.50];  // desired result: ['left', 'right', 'main']
var array6   = [0.40, 0.10, 0.50];  // desired result: ['left', 'right', 'main']
var array7   = [0.50, 0.50];        // desired result: ['left', 'main']

function transformArr(numArr) {
    var res = ['left', 'right'];
    maxIdx = numArr.lastIndexOf(Math.max.apply(Math, numArr));
    res.splice(maxIdx, numArr.length === 2, 'main')
    return res;
}

console.log('Result 1', transformArr(array1));
console.log('Result 2', transformArr(array2));
console.log('Result 3', transformArr(array3));
console.log('Result 4', transformArr(array4));
console.log('Result 5', transformArr(array5));
console.log('Result 6', transformArr(array6));
console.log('Result 7', transformArr(array7));

此代码的编写考虑到数组将包含 2或3个数字。

评论是否有任何不明确的内容。

答案 1 :(得分:1)

如果数组的长度是2,你可以在右边第一个最大值的索引处拼接,值main并删除一个值。

function x(array) {

    function getMax(r, a, i, aa) {
        return a > aa[r] ? i : r;
    }

    var r = ['left', 'right'];
    r.splice(array.reduceRight(getMax, array.length - 1), array.length === 2, 'main');
    return r;
}

console.log(x([0.25, 0.75]));        // ['left', 'main']
console.log(x([0.75, 0.25]));        // ['main', 'right']
console.log(x([0.25, 0.50, 0.25]));  // ['left', 'main', 'right']
console.log(x([0.50, 0.25, 0.25]));  // ['main', 'left', 'right']
console.log(x([0.25, 0.25, 0.50]));  // ['left', 'right', 'main']
console.log(x([0.40, 0.10, 0.50]));  // ['left', 'right', 'main']
console.log(x([0.50, 0.50]));        // ['left', 'main']
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)

我的5美分:

var expr = $('#TOperator').val();  // Get current value
expr += '+';                       // Concatenate the + sign
$('#TOperator').val(expr);         // Set the new value