2017-09-27 2 views
-1

に複数の配列からすべての要素で最高と最低の入手:私は18個の要素の4つのアレイと、このアレイ(**コード/アレイの一部ではなく、結果を参照)がジャバスクリプト

highlow: [["-5", "8", "-8", "13", "17", "11", "17", "4", "17", "18", "18", "10", "-8", "-13", "-22", "-16", "-3", "27"], 
["5", "**15**", "6", "-11", "-18", "-7", "-6", "7", "-10", "5", "6", "-6", "-12", "-10", "-7", "14", "10", "23"], 
["-6", "7", "8", "18", "6", "14", "24", "14", "6", "13", "8", "18", "-14", "-15", "-9", "-13", "14", "12"], 
["-19", "-12", "14", "20", "15", "20", "11", "19", "13", "5", "2", "-14", "5", "6", "16", "-5", "8", "30"]] 

私が必要18個の要素の中で最大の2つの新しい配列を取得し、最低の配列を1つ取得します。 私が作ったこの:

var highlow = []; 
var high = []; 
var low = []; 

for (i = 0; i < 18; i++) { 
     high.push("0"); 
     low.push("0"); 
}     

for (var l = 0; l < highlow.length; l++) { 

        for (var m = 0; m < highlow[0].length; m++) { 
         // High 
          if (highlow[l][m] > high[m]) { 
           high.splice(m, 1, highlow[l][m]); 
          }  
         // Low 
          if (highlow[l][m] < low[m]) { 
           low.splice(m, 1, highlow[l][m]); 
          } 
        } 
        } 

しかし、私が得る結果は、それが8を返す二高の要素で、これをですが、それは15(参照**)でなければなりません:

high: 
["5","**8**","8","20","6","20","24","7","6","5","8","18","5","6","16","14","8","30"] 
low: 
["-19","-12","14","-11","15","-7","11","19","13","5","2","-14","-14","-15","-9","-5","-3","12"] 

私はカントそれはショートカットすることができれば、これを管理する方法を見つけ出す...

Underscore.jsは、あなたは、文字列ではなく数値を比較しているので、あなたはそれらの結果を取得している...、

+0

それは私には明確には見えません。 "highlow"という配列の配列があり、それを2つの配列に処理したいとします。 1つは "low"という名前の "highlow"の18個の下位要素と "high"という名前の18個以上の上位要素です。 私が見ていることから、問題だけではありません。期待どおりの結果を持つ例を印刷できますか? – Sylhare

+0

「24」は「8」よりも高いと思いますか? – Keith

+0

[OK]それは最初の間違った要素を表示するために(完全にはっきりしない)申し訳ありませんが、多くのエラーがあります; –

答えて

1

をタグ付けされています。正しい結果出すの比較を行う際に数値に変換

console.log("15" > "8"); // false 
 
console.log(15 > 8); // true

var input = [ 
 
    ["-5", "8", "-8", "13", "17", "11", "17", "4", "17", "18", "18", "10", "-8", "-13", "-22", "-16", "-3", "27"], 
 
    ["5", "15", "6", "-11", "-18", "-7", "-6", "7", "-10", "5", "6", "-6", "-12", "-10", "-7", "14", "10", "23"], 
 
    ["-6", "7", "8", "18", "6", "14", "24", "14", "6", "13", "8", "18", "-14", "-15", "-9", "-13", "14", "12"], 
 
    ["-19", "-12", "14", "20", "15", "20", "11", "19", "13", "5", "2", "-14", "5", "6", "16", "-5", "8", "30"] 
 
]; 
 

 
var high = []; 
 
var low = []; 
 
for (var i=0; i<input[0].length; i++) { 
 
    for (var j = 0; j<input.length; j++) { 
 
     if (!high[i] || Number(input[j][i]) > Number(high[i])) { high[i] = input[j][i];} 
 
     if (!low[i] || Number(input[j][i]) < Number(low[i])) { low[i] = input[j][i];} 
 
    } 
 
} 
 

 
console.log("high:", high); 
 
console.log("low:", low);

を(私は「あなたがwouldnので、配列が評価される順序を入れ替え出力を事前に初期化する必要があります。それ以外の場合は、​​のコンバージョンを除いてコードに似ています。

+0

Ahh私は、parseInt()を追加しました: しかし、低い配列の結果は、0が最も低い正の値ではないことを知っていますか?数。 –

+0

@MartinLyderおっと!私の部分でばかげた間違いは、今修正されました。 –

+0

はい!それは動作します、ありがとうございます!私はこの答えを受け入れる:)それは私自身のコードに最も近いものです... –

0

すべての値を1つの配列にドロップし、値をソートしてから、配列を半分にカットして高値配列と低値配列を作成できます。

let superArray = []; 
superArray.push(highlow[0]); 
superArray.push(highlow[1]); 
superArray.push(highlow[2]); 
superArray.push(highlow[3]); 

superArray.sort(); 

let lowArray = superArray.splice(0, superArray.length -1); 
let highArray = superArray; 
0

最小値と最大値を減らすことができます。

function highlow(array) { 
 
    return array.reduce(function (r, a, i) { 
 
     if (!i) { 
 
      r.low = a.slice(); 
 
      r.high = a.slice(); 
 
      return r; 
 
     } 
 
     a.forEach(function (b, j) { 
 
      r.low[j] = Math.min(r.low[j], b); 
 
      r.high[j] = Math.max(r.high[j], b); 
 
     }) 
 
     return r; 
 
    }, { low: [], high: [] }); 
 
} 
 

 
console.log(highlow([["-5", "8", "-8", "13", "17", "11", "17", "4", "17", "18", "18", "10", "-8", "-13", "-22", "-16", "-3", "27"], ["5", "15", "6", "-11", "-18", "-7", "-6", "7", "-10", "5", "6", "-6", "-12", "-10", "-7", "14", "10", "23"], ["-6", "7", "8", "18", "6", "14", "24", "14", "6", "13", "8", "18", "-14", "-15", "-9", "-13", "14", "12"], ["-19", "-12", "14", "20", "15", "20", "11", "19", "13", "5", "2", "-14", "5", "6", "16", "-5", "8", "30"]]));

1

使用Math.min()Math.max()

var high = [], low = []; 
for (i = 0; i < highlow[0].length; i++) { 
    var col = highlow.map(val => val[i]); 
    high.push(col.reduce((a,b)=>Math.max(a,b))); 
    low.push(col.reduce((a,b)=>Math.min(a,b))); 
} 
0

はそれが役立つホープ:

var highlow =[["-5", "8", "-8", "13", "17", "11", "17", "4", "17", 
    "18", "18", "10", "-8", "-13", "-22", "-16", "-3", "27"], 
    ["5", "15", "6", "-11", "-18", "-7", "-6", "7", "-10", "5", "6", 
    "-6", 
    "-12", "-10", "-7", "14", "10", "23"], 
    ["-6", "7", "8", "18", "6", "14", "24", "14", "6", "13", "8", 
    "18", 
    "-14", "-15", "-9", "-13", "14", "12"], 
    ["-19", "-12", "14", "20", "15", "20", "11", "19", "13", "5", "2", 
    "-14", "5", "6", "16", "-5", "8", "30"]] 

var high=[]; 
var low=[]; 
highlow.map((a)=>{ 
    hight.push(Math.max(...a)); 
    low.push(Math.min(...a)); 
}); 
関連する問題