
成绩排序应该按照降序排
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- </head>
-
- <body>
- <div id="app">搜索:<input type="text" v-model="mincore">~<input type="text" v-model="maxcore"><br> 排名方式:
- <input type="radio" v-model="chose" id="总分" value="总分" @click="choice">总分 <input type="radio" v-model="chose" id="'数学" value="数学" @click="choice">数学 <input type="radio" v-model="chose" id='语文' value="语文" @click="choice">语文 <input type="radio"
- v-model="chose" id="英语" value="英语" @click="choice">英语
- <table>
- <thead>
- <th>排名</th>
- <th>姓名</th>
- <th>数学</th>
- <th>语文</th>
- <th>英语</th>
- <th>总分</th>
- </thead>
- <tbody>
- <tr v-for="(item,index) in showcore">
- <td>{{index+1}}</td>
- <td>{{item.name}}</td>
- <td>{{item.math}}</td>
- <td>{{item.chinese}}</td>
- <td>{{item.eng}}</td>
- <td>{{item.total}}</td>
- </tr>
- </tbody>
- </table>
- </div>
- <script src="/demo3_824/js文件/vue.js"></script>
- <script>
- var data = {
- message: [{
- name: '张三',
- math: 97,
- chinese: 89,
- eng: 67
- }, {
- name: '王五',
- math: 72,
- chinese: 55,
- eng: 78
- }, {
- name: '赵茜',
- math: 32,
- chinese: 45,
- eng: 78
- }, {
- name: '孙素',
- math: 45,
- chinese: 67,
- eng: 89
- }],
- mincore: 0,
- maxcore: 300,
- chose: '总分',
- //比较函数
- compare(p) {
- return function(m, n) {
- var a = m[p]
- var b = n[p]
- return a - b
- }
- },
- }
- const app = new Vue({
- el: '#app',
- data: data,
- computed: {
- showcore() {
- let showcores = []
- for (let i = 0; i < this.message.length; i++) {
- total = this.message[i].math + this.message[i].chinese + this.message[i].eng
- if (total >= this.mincore && total < this.maxcore) {
- //添加total属性
- showcores.push(Object.assign(this.message[i], {
- total: total
- }))
- }
- }
- //默认排序
- showcores.sort(this.compare('total'))
- return showcores
- }
- },
- methods: {
- //排序
- choice(event) {
- console.log(3);
- if (event.target.value == '数学') {
- this.showcore.sort(this.compare('math'))
- }
- if (event.target.value == '语文') {
- this.showcore.sort(this.compare('chinese'))
- }
- if (event.target.value == '英语') {
- this.showcore.sort(this.compare('eng'))
- }
- if (event.target.value == '总分') {
- this.showcore.sort(this.compare('total'))
- }
- }
- }
- })
- </script>
- </body>
-
- </html>
1、给数组中的所有对象追加一个属性
- let arr = []
- let lilst = [{
- name: '小红',
- math: 40,
- en: 89
- }, {
- name: '小红',
- math: 40,
- en: 89
- }]
- lilst.map((item, index) => {
- console.log(item);
- let result = item.math + item.en
- arr.push(Object.assign(item, {
- total: result
- }))
- })
- console.log(arr);

2、sort方法对对象数组实现排序
sort()方法汇改变原数组,默认按照字符进行排序
也可以选择他的某一顺序进行排序
- let arr = []
- let lilst = [{
- name: '小红',
- math: 80,
- en: 82
- }, {
- name: '小红',
- math: 79,
- en: 89
- }]
- lilst.map((item, index) => {
- console.log(item);
- let result = item.math + item.en
- arr.push(Object.assign(item, {
- total: result
- }))
- })
- //比较函数
- function compare(p) {
- return function(m, n) {
- var a = m[p]
- var b = n[p]
- return a - b //升序
- }
- }
- arr.sort(compare('math'))
- console.log(lilst, arr);

3、数组排序
- let arr = [2, 5, 7, 2, 523, 435, 64]
-
- function compare(a, b) {
- return b - a //降序
- }
- arr.sort((a, b) => {
- return a - b
- })
- console.log(arr);
4、sort按照时间进行排序
- let arr = [{
- "applyId": "1909101016056138768202215",
- "createTime": "2019-09-10 10:16:02",
- "status": 0,
- "userName": "李某某"
- }, {
- "applyId": "1909101027225522012190631",
- "createTime": "2019-09-10 10:07:19",
- "status": 1,
- "userName": "李某某"
- }, {
- "applyId": "1909101027225562448906248",
- "createTime": "2019-09-10 10:27:19",
- "status": 3,
- "userName": "李某某"
- }]
-
-
- arr.sort((a, b) => {
- return Date.parse(a.createTime) - Date.parse(b.createTime)
- })
- console.log(arr)

注意:此时需要将时间转换为时间戳在进行比较
5、input表单标签
type:类型 disabled:表示此表单控件不可用 name:控件的名称,与表单数据一起提交
placeholder:提示用户输入框的格式(与label元素区别) value:空间的初始值
radio单选按钮:如果name一样的话,name这些radio就是一组一组的,只能有一个被选中
如果想多个选中,可以将name换成不同的名字,也可以直接使用复选按钮
- //name相同才能实现单选按钮。
- <input type="radio" name="question1" value="boy">男
- <input type="radio" name="question1" value="girl">女
-
- //如果用v-model绑定,则无需name参数。
- <input type="radio" v-model="rank" value="total">
- <input type="radio" v-model="rank" value="math">
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- .active {
- color: orange
- }
- </style>
- </head>
-
- <body>
- <div id="app">
- <div>
- <span>搜索:</span><input type="text" v-model="min"><span>~</span><input type="text" v-model="max">
- </div>
- <div>
- <span>排名方式:</span>
- <input type="radio" value="total" v-model="rank">总分
- <input type="radio" value="math" v-model="rank">数学
- <input type="radio" value="chinese" v-model="rank">语文
- <input type="radio" value="english" v-model="rank">英语
- </div>
- <table>
- <thead>
- <tr>
- <th>排名</th>
- <th>姓名</th>
- <th>数学</th>
- <th>语文</th>
- <th>英语</th>
- <th>总分</th>
- </tr>
- </thead>
- <!-- 先筛选再排序,遍历排序后的数组 -->
- <tr v-for="(item,index) in sortScoreData" :key="index">
- <td>{{index+1}}</td>
- <td>{{item.name}}</td>
- <td>{{item.math}}</td>
- <td>{{item.chinese}}</td>
- <td>{{item.english}}</td>
- <td>{{oneTotal(item)}}</td>
- </tr>
- </table>
- </div>
- <script src="/demo3_824/js文件/vue.js"></script>
- <script>
- let data = {
- scoresData: [{
- name: '张三',
- math: 97,
- chinese: 89,
- english: 67
- }, {
- name: '李四',
- math: 67,
- chinese: 52,
- english: 98
- }, {
- name: '王五',
- math: 72,
- chinese: 87,
- english: 89
- }, {
- name: '赵钱',
- math: 92,
- chinese: 87,
- english: 59
- }, {
- name: '孙李',
- math: 47,
- chinese: 85,
- english: 92
- }],
- rank: "total", //记录当前用户选择的排序方式
- min: 0,
- max: 300
- }
- const app = new Vue({
- el: '#app',
- data: data,
- computed: {
- oneTotal() {
- return function(item) {
- return item.math + item.chinese + item.english
- }
- },
- //计算数得到筛选后的数组
- filterScoreData() {
- return this.scoresData.filter(item => {
- if (this.rank == 'total') {
- return (this.oneTotal(item)) > this.min && (this.oneTotal(item)) <= this.max
- }
- return item[this.rank] >= this.min && item[this.rank] <= this.max
- })
- },
- //计算属性得到排序后的数组
- sortScoreData() {
- switch (this.rank) {
- case 'total':
- return this.filterScoreData.sort((a, b) => (this.oneTotal(b)) - (this.oneTotal(a)))
- break;
- case 'math':
- return this.filterScoreData.sort((a, b) => b.math - a.math)
- break;
- case 'chinese':
- return this.filterScoreData.sort((a, b) => b.chinese - a.chinese)
- break;
- case 'english':
- return this.filterScoreData.sort((a, b) => b.english - a.english)
- break;
- }
- }
- }
- })
- </script>
- </body>
-
- </html>