#arrays #vue.js #sorting
#массивы #vue.js #сортировка
Вопрос:
У меня есть этот код. Мне нужно отсортировать массив mices по весу, но у меня это не работает.Как я могу перенести функцию sortBy в шаблон, чтобы массив сортировался по весу — от малого к большому или в обратном порядке. Где я ошибся? Это работает только тогда, когда я использую непосредственно массив mices.
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.0/vue.js"></script>
<!DOCTYPE html>
<html>
<head>
<title>Mice Finder</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP VmmDGMN5t9UJ0Z" crossorigin="anonymous"></head>
<body>
<div id="app">
</div>
<script src="https://unpkg.com/vue"></script>
<script>
var app = new Vue({
el: "#app",
data: {
mices: [{
id: 9,
name: "Logitech G Pro Wireless",
size: "M",
image: "assets/images/mice_id1.png",
shape: "Ambidextrous",
weight: 80,
mode: "Wireless",
description: "None"
},
{
id: 2,
name: "Razer Viper Ultimate",
size: "M",
image: "assets/images/mice_id2.png",
shape: "Ambidextrous",
weight: 74,
mode: "Wireless",
description: "None"
},
{
id: 3,
name: "Razer Viper Mini",
size: "S",
image: "assets/images/mice_id3.png",
shape: "Ambidextrous",
weight: 60,
mode: "Wired",
description: "None"
},
{
id: 4,
name: "Cooler Master MM710",
size: "S",
image: "assets/images/mice_id4.png",
shape: "Ambidextrous",
weight: 54,
mode: "Wired",
description: "None"
},
{
id: 7,
name: "Glorious Model O",
size: "M",
image: "assets/images/mice_id5.png",
shape: "Ambidextrous",
weight: 68,
mode: "Wired",
description: "None"
}],
},
computed: {
byweight: function () {
return _.sortBy(this.mices, 'weight')
}
},
template: `<ul>
<span v-for="mice in byweight" style="padding: 3px;">
<p><div class="card" style="width: 18rem;">
<img class="card-img-top" v-bind:src="mice.image" alt="Card image cap">
<div class="card-body">
<h5 class="card-title">{{mice.name}}</h5>
<p class="card-text">Mode: {{mice.mode}}. {{mice.size}}-size. {{mice.shape}}. Weight: {{mice.weight}}.</p>
<p class="card-text">{{mice.description}}</p>
<a href="#" class="btn btn-primary">Buy this mice</a>
</div>
</div>
</span>
</ul>`,
});
</script>
<style>
ul {
display: flex;
padding: 5px;
}
</style>
</body>
</html>
У меня есть этот код. Мне нужно отсортировать массив mices по весу, но у меня это не работает.Как я могу перенести функцию sortBy в шаблон, чтобы массив сортировался по весу — от малого к большому или в обратном порядке. Где я ошибся? Это работает только тогда, когда я использую непосредственно массив mices.
Ответ №1:
Используете ли вы Underscore.js ? Если нет, у вас нет доступной функции _sortBy. Вы могли бы просто использовать функцию сортировки. Для возрастания:
computed: {
byweight: function () {
return this.mices.sort((a,b)=>
{return a.weight - b.weight });
}
},