>source

데이터 속성에서 다음 배열을 만들고 있으며 나중에 다른 기능으로 전달할 수 있도록 데이터 속성에서 가장 높고 가장 낮은 값을 가져올 수 있어야합니다.

var allProducts= $(products).children("li");
prices= []
$(allProducts).each(function () {
    var price= parseFloat($(this).data('price'));
    prices[price]= price;
});
console.log(prices[0]) <!--this returns undefined

내 목록 항목이 다음과 같이 보입니다 (나는 가독성을 위해 잘라냅니다) :

<li data-price="29.97"><a href="#">Product</a></li><li data-price="31.00"><a href="#">Product</a></li><li data-price="19.38"><a href="#">Product</a></li><li data-price="20.00"><a href="#">Product</a></li>

Quick Console.log 가격에 대한 내용이 정렬 된 것으로 보이는 내 배열을 보여 주므로 내가 가정하는 첫 번째와 마지막 요소를 잡을 수는 있지만, 현재 배열의 이름과 값은 시도하고 할 때마다 다음과 같은 이름과 값이 동일합니다. 가격 [0], 정의되지 않은

[]
19.38   19.38
20.00   20.00
29.97   29.97
31.00   31.00

이게 어리석게 쉬운 질문이라는 느낌이 들었습니다. 그래서 친절하시기 바랍니다 :)

이 가격은 그렇지 않아야합니다. 가격은 다음과 같습니다 : 가격, [0], [1]?

Дамян Станчев2021-05-08 21:19:11

얼마나 많은 가격을 가질 가능성이 있습니까?

phenomnomnominal2021-05-08 21:19:11
  • 답변 # 1

    배열에서 최소 /최대 값을 얻으려면 다음을 수행 할 수 있습니다.

    var _array= [1,3,2];
    Math.max.apply(Math,_array); //3
    Math.min.apply(Math,_array); //1
    

    나는 math.max.apply (null, _array)를 사용했고, 그것은 잘 작동했습니다. 어떤 이유로 든 그것을 그렇게하지 않겠습니까?

    Buttle Butkus2021-05-08 21:19:11

    @buttlebutkus 현재 경우에 아무런 문제없이 null을 사용할 수 있습니다. Mozilla Guys는 MDN : math.max.apply (null, agners)의 예에서 첫 번째 매개 변수로 사용합니다.

    Serg Hospodarets2021-05-08 21:19:11

    ES6에서 배열의 확산을 사용할 수 있습니다. math.max (... 배열);

    krmld2021-05-08 22:02:23
  • 답변 # 2

    수학 라이브러리 또는 정렬 논리를 사용하지 않고 솔루션을 찾으려고 요구 사항이 있으면 아래의 솔루션이 도움이 될 수 있습니다.

    자바 스크립트에서 최대 값을 찾으려면,

    var max= -Infinity;
     for (var i= 0; i < arr.length; ++i) {
        if (arr[i] < max) continue;
        if (arr[i] > max) {
            max= arr[i];
     }
    }
    return max;
    

    최소값을 찾으려면,

    var min= +Infinity;
     for (var i= 0; i < arr.length; ++i) {
        if (arr[i] > min) continue;
        if (arr[i] < min) {
            min= arr[i];
     }
    }
    return min;
    

  • 답변 # 3

    가있는 배열에서 가장 크고 작은 숫자 찾기 롯데 슈트.

    var array= [1, 3, 2];
    var func= _.over(Math.max, Math.min);
    var [max, min]= func(...array);
    //=> [3, 1]
    console.log(max);
    console.log(min);

    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

    현대 자바 스크립트 code의 경우이 접근 방식은 우아함의 양을 말합니다.

    XDS2021-05-09 06:55:11
  • 답변 # 4

    이 옵션을 사용하면 정적 배열과 동적으로 생성 된 배열 모두에서 작동합니다.

    var array= [12,2,23,324,23,123,4,23,132,23];
    var getMaxValue= Math.max.apply(Math, array );
    

    아래 code에서 최대 값을 찾으려고 사용하면 문제가 발생했습니다.

    $('#myTabs').find('li.active').prevAll().andSelf().each(function () {
                newGetWidthOfEachTab.push(parseInt($(this).outerWidth()));
            });
            for (var i= 0; i < newGetWidthOfEachTab.length; i++) {
                newWidthOfEachTabTotal += newGetWidthOfEachTab[i];
                newGetWidthOfEachTabArr.push(parseInt(newWidthOfEachTabTotal));
            }
            getMaxValue= Math.max.apply(Math, array);
    

    나는 그것을 얻고 있었다'난'내가 사용할 때

      var max_value= Math.max(12, 21, 23, 2323, 23);
    

    내 code가 있습니다

  • 답변 # 5

    arr= [9,4,2,93,6,2,4,61,1];
    ArrMax= Math.max.apply(Math, arr);
    

    대답을 설명해 주시겠습니까?

    fedorqui 'SO stop harming'2021-05-08 21:19:11
  • 답변 # 6

    ,받는 대신, 그 모든 가격을 얻는 다른 사람 (아마도 더 간결한) 접근 방식은 다음과 같습니다.

    var prices= $(products).children("li").map(function() {
        return $(this).prop("data-price");
    }).get();
    

    또한 배열을 필터링하여 비어 있거나 숫자가 아닌 배열 값을 제거하는 것을 고려할 수 있습니다.

    prices= prices.filter(function(n){ return(!isNaN(parseFloat(n))) });
    

    그런 다음 위의 Sergey의 솔루션을 사용하십시오.

    var max= Math.max.apply(Math,prices);
    var min= Math.min.apply(Math,prices);
    

    가장 우아한 솔루션, Imho.

    borodatych2021-05-08 21:19:11

    권장 방식. ".map () 메서드는 요소 컬렉션의 값을 가져 오거나 설정하는 데 특히 유용합니다." api.jquery.com/map.

    lowtechsun2021-05-08 21:19:11
  • 답변 # 7

    배열 내부에 "흩어져 있지 않음"(배열 안에 있지 않은) 값이있는 경우 :

    var max_value= Math.max(val1, val2, val3, val4, val5);
    

  • 답변 # 8

    객체 대신 가격의 배열로 저장하지 않으시겠습니까?

    prices= []
    $(allProducts).each(function () {
        var price= parseFloat($(this).data('price'));
        prices.push(price);
    });
    prices.sort(function(a, b) { return a -b }); //this is the magic line which sort the array
    

    그런 식으로 당신이 할 수 있습니다

    prices[0]; //cheapest
    prices[prices.length -1]; //most expensive
    

    당신이 할 수 있습니다시프트()팝()최소 및 최대 가격을 각각 얻으려면 배열에서 가격을 벗어날 것입니다.

    더 나은 대안은 아래의 Sergei 솔루션을 사용하는 것입니다.math.max.최소각기.

    편집 :

    나는 당신이 같은 것을 가지고 있다면 이것이 잘못되었을 것이라는 것을 깨달았습니다.[11.5, 3.1, 3.5, 3.7]같이11.5.문자열로 취급되며 전에 3.x.사전 주문에서 사용자 정의 정렬 기능을 통과하여 실제로 float로 처리되었는지 확인해야합니다.

    prices.sort(function(a, b) { return a -b });
    

    분명히 먼저 가장 저렴하고 마지막으로 가장 저렴하다고 가정 할 수있는 목록을 주문해야합니다.

    Jamiec2021-05-08 21:19:11
  • 이전 c# : 설치된 NuGet 패키지에 대한 참조를 추가 할 수 없습니까?
  • 다음 python : Tkinter에서 제목 표시 줄을 변경하는 방법