给定一个始终包含two
或three
值的数组。我需要确定最大值的索引并向其添加属性,例如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
。
答案 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