2017-09-27 8 views
-1

내가 18 개 요소 4 개 배열이 어레이 (**는 코드/어레이의 일부가 아닌 결과를 의미한다)가 확인 :JavaScript의 다중 배열에서 모든 요소에 최고 및 최저

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"]] 

I가 필요 18 개의 요소 중에서 가장 높은 두 개의 새로운 배열을 얻고, 가장 낮은 배열을 하나씩 얻습니다. 내가 만든이 :

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"라는 배열 배열이 있으며 두 배열로 처리하려고합니다. 18 개의 하위 요소가 "highlow"라는 단어는 "low"단어이고 18 개 단어는 "high"라는 이름이 붙은 단어 중 하나입니까? 내가 본 것에서 만 문제가되는 것이 아닙니다. 예상 결과와 함께 예제를 인쇄 할 수 있습니까? – Sylhare

+0

"24"가 "8"보다 높다고 생각하십니까? – Keith

+0

예 예 1 (잘못된 요소는 아니지만 유감 스럽지만 처음에는 잘못된 요소를 표시합니다.) –

답변

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);
는 (I '는 같으면 있도록 배열이 평가되는 순서를 교환 출력을 미리 초기화해야하지만 그렇지 않으면 Number() 번의 전환을 제외하고는 코드와 유사합니다.

+0

Ahh, see parseInt() : 낮은 배열의 결과는 0이 가장 낮은 양의 값이 아닙니다. 번호. –

+0

@MartinLyder 와우! 내 부분에 어리석은 실수, 이제 해결. –

+0

예! 작동, 고마워요 !! 나는이 대답을 받아 들인다 : 그것은 내 자신의 코드에 가장 가까운 것이다 ... –

0

모든 값을 단일 배열로 놓고 값을 정렬 한 다음 배열을 반으로 잘라 높고 값이 작은 배열을 만들 수 있습니다.

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