在 jquery 和 ecmascript6 中获得最高的属性数

get highest attribute number in jquery and ecmascript6

正在尝试获取具有相同数据属性的所有选择的最大值。但收到错误

{ "message": "Uncaught TypeError: undefined is not a function",
"filename": "https://stacksnippets.net/js", "lineno": 37, "colno": 34 }

请 运行 下面的代码片段,我希望它能输出 3,因为这是最高的响应组编号,question.id 为 1

$(document).ready(function() {
  let question = {
    Id: 1
  };

  let responseGroupNumber = Math.max(...$(`select[data-questionid = ${question.Id}]`)
    .map(x => $(x)
      .attr('data-responsegroupnumber')));

  console.log(responseGroupNumber);

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select data-questionid="1" data-responsegroupnumber="1">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>


<select data-questionid="1" data-responsegroupnumber="2">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>

<select data-questionid="1" data-responsegroupnumber="3">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>

映射前需要使用jQuery.get()函数:

如果不这样做,您将使用 jQuery .map() method instead of Array#map

$(document).ready(function() {
  let question = {
    Id: 1
  };
  
  let responseGroupNumber = Math.max(...$(`select[data-questionid = ${question.Id}]`).get().map(x => $(x).attr('data-responsegroupnumber')));
  console.log(responseGroupNumber);
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select data-questionid="1" data-responsegroupnumber="1">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>


<select data-questionid="1" data-responsegroupnumber="2">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>

<select data-questionid="1" data-responsegroupnumber="3">
  <option>one</option>
  <option>two</option>
  <option>three</option>
</select>

另一个可能的实现是:

$(document).ready(function() {
 let question = {
   Id: 1
 };

 var selects = $(`select[data-questionid=${question.Id}]`).toArray();
 var dataGroupNumber = selects.map(select => ($(select).attr('data- 
   responsegroupnumber')));

let responseGroupNumber = Math.max.apply(null, dataGroupNumber);
console.log(responseGroupNumber);
});

Math.max.apply(null, dataGroupNumber) 而不是在 Math.max( ... );

中展开数组