Javascript 按值和顺序确定数组

Javascript 按值和顺序确定数组,javascript,Javascript,给定一个数组,该数组始终包含两个或三个值。我需要确定最大值的索引并为其添加属性,比如说main。然后根据顺序,将左设置为第一个小值,将右设置为第二个小值。(小心阵列6) 必须始终有一个main 很容易确定最大值,如: var array1=[0.25,0.75];//所需结果:['left','main'] var array2=[0.75,0.25];//所需结果:['main','right'] var array3=[0.25,0.50,0.25];//所需结果:[“左”、“主”、“右”

给定一个数组,该数组始终包含两个或三个值。我需要确定最大值的索引并为其添加属性,比如说
main
。然后根据顺序,将
设置为第一个小值,将
设置为第二个小值。(小心
阵列6

必须始终有一个
main

很容易确定最大值,如:

var array1=[0.25,0.75];//所需结果:['left','main']
var array2=[0.75,0.25];//所需结果:['main','right']
var array3=[0.25,0.50,0.25];//所需结果:[“左”、“主”、“右”]
var array4=[0.50,0.25,0.25];//所需结果:[“主”、“左”、“右”]
var array5=[0.25,0.25,0.50];//所需结果:[“左”、“右”、“主”]
var array6=[0.40,0.10,0.50];//所需结果:[“左”、“右”、“主”]
var array7=[0.50,0.50];//所需结果:['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

);在这里,我编写了一个函数,它将以最小的
if…else

var array1=[0.25,0.75];//所需结果:['left','main']
var array2=[0.75,0.25];//所需结果:['main','right']
var array3=[0.25,0.50,0.25];//所需结果:[“左”、“主”、“右”]
var array4=[0.50,0.25,0.25];//所需结果:[“主”、“左”、“右”]
var array5=[0.25,0.25,0.50];//所需结果:[“左”、“右”、“主”]
var array6=[0.40,0.10,0.50];//所需结果:[“左”、“右”、“主”]
var array7=[0.50,0.50];//所需结果:['left','main']
函数变换器(numArr){
var res=['左','右'];
maxIdx=numArr.lastIndexOf(Math.max.apply(Math,numArr));
res.splice(maxIdx,numArr.length==2,'main')
返回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,则可以在右侧第一个最大值的索引处拼接值
main
,并删除一个值

函数x(数组){
函数getMax(r,a,i,aa){
返回a>aa[r]?i:r;
}
var r=[‘左’、‘右’];
r、 拼接(array.reduceRight(getMax,array.length-1),array.length==2,'main');
返回r;
}
console.log(x([0.25,0.75]);//[‘左’、‘主’]
console.log(x([0.75,0.25]);//['main','right']
log(x([0.25,0.50,0.25]);//[‘左’、‘主’、‘右’]
log(x([0.50,0.25,0.25]);//['main'、'left'、'right']
console.log(x([0.25,0.25,0.50]);//[‘左’、‘右’、‘主’]
console.log(x([0.40,0.10,0.50]);//[‘左’、‘右’、‘主’]
console.log(x([0.50,0.50]);//[“左”,“主”]
.as控制台包装{最大高度:100%!重要;顶部:0;}
我的5美分:

function transformArr(arr){
  let indexes = arr.map((_, i) => i);
  indexes.sort((i1, i2) => arr[i2] - arr[i1]);

  let mainI = indexes[0];
  indexes = indexes.map(x => {
    return {index: x, atLeft: x < mainI, value: arr[x]};
  });

  let res = {"main": indexes[0].value};
  // let names = ['left', 'inner left', 'inner right', 'right'];
  let names = ['left', 'right'];
  for(let i = 1; i < indexes.length; i++){
    let val = indexes[i];
    let name = val.atLeft ? names.shift() : names.pop();
    res[name] = val.value;
  }
  return res;
}
函数转换arr(arr){
设索引=arr.map((u,i)=>i);
sort((i1,i2)=>arr[i2]-arr[i1]);
设mainI=index[0];
index=index.map(x=>{
返回{index:x,atLeft:x
我不认为用一句简短的话就可以做到(或可读)。相反,我将编写一个函数
函数(概率){return['left','right','main'];}
并使用if/else块。当函数运行时,您可以尝试优化和组合类似的代码块。
[0.50,0.25,0.75]
的输出应该是什么?它是
[左,右,主]
简单吗?但是
0.50
大于
0.25
,根据你的问题,它将是
[右,左,主]
oooh@KoushikChatterjee好问题!我将更新问题,因为我在那里提到了错误!它应该是
['left'、'right'、'main']
@user3151902是的,类似的东西会很好,但是如何知道哪些已经被使用了?
var array6=[0.50,0.25,0.50]
必须是
['left','right','main']
或者可以是
['main','left','right']
还有
[0.50,0.50,0.50]
的期望结果是什么?@caramba我已经编辑了我的答案,删除了
if
else。请查收。