我正在创建一个评级系统,它将值舍入到最接近的0.5并包含0到5之间的值。
如何迭代数组,将值(舍入到最接近的0.5)拆分为单位。
let rating = 3.7
let adjustedRating = (Math.round(rating * 2) / 2);
e.g。 3.7:['1','1','1','1',0]
1.4等于['1', '0.5', '0', '0', '0']
let starsToShow = new Array().fill('0');
starsToShow.forEach((v, i) => {
...
});
答案 0 :(得分:2)
使用 Array.from
let rating = 3.7
let adjustedRating = (Math.round(rating * 2) / 2);
console.log(
Array.from({
// set array length here
length: 5
}, function(_, i) { // iterate over element to update
// get the difference with index
var dif = adjustedRating - i;
// based on the difference assign the array value
return dif >= 1 ? '1' : dif > 0 ? '0.5' : '0';
})
);
使用简单的for循环
var rating = 3.7,
res = [],
adjustedRating = (Math.round(rating * 2) / 2);
for (var i = 0; i < 5; i++) {
var dif = adjustedRating - i;
res.push(dif >= 1 ? '1' : dif > 0 ? '0.5' : '0');
}
console.log(res);
答案 1 :(得分:1)
使用 reduce 和 forEach 只是另一个条目。如果代码较少(1行?),来自可能会更好,但兼容性可能是一个问题。
#mySelect
答案 2 :(得分:0)
$('.calculate-button').click(function(){
var rating = $('.rating').val();
var array = new Array();
while (rating > 0){
var currentRating;
if(rating > 1)
{
var currentRating = 1;
rating -= currentRating;
array.push(currentRating);
}
else{
var currentRating = (Math.round(rating * 2) / 2).toFixed(1);
rating = 0;
array.push(parseFloat(currentRating));
}
}
while (array.length < 5)
{
array.push(0);
}
console.log(array);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="rating"/>
<button class="calculate-button">Calculate</button>
&#13;
答案 3 :(得分:0)
这可以按你的意愿工作,但我更愿意你接受AlienHoboken的建议。它更干净。
var lsItems = [{"id":"100033"},{"id":"100035"},{"id":"1000336"}];
var item = lsItems.find(i => i.id === "100035");
console.log(item)