js学习笔记八(扫雷,of,in)

·  阅读 33
/*array 是一个「包含了『只包含了 0 9 的 array』的 array」
返回一个标记过的 array
范例如下, 这是 array
    [
        [0, 9, 0, 0],
        [0, 0, 9, 0],
        [9, 0, 9, 0],
        [0, 9, 0, 0],
    ]
    这是标记后的结果
    [
        [1, 9, 2, 1],
        [2, 4, 9, 2],
        [9, 4, 9, 2],
        [2, 9, 2, 1],
    ]
规则是, 0 会被设置为四周 8个元素中 9 的数量
思路:
假设已经生成了 array,写一个变换函数
从头遍历到尾,对每一个元素进行判断
判断越界的函数
    */
var m = function () {
    var mM = Math.random()
    if (mM > 0.5) {
        return 9
    } else  {
        return 0
    }
}
var arrayNs = function (n) {
    var arrays = []
    for (var i = 0; i < n; i++) {
        arrays.push(m())
    }
    return arrays
}
var squre = function (n) {
    let array = []
    for(let i = 0; i < n; i++) {
        let line = arrayNs(n)
        array.push(line)
    }
    return array
}
var is_yuejie = function (array, x, y) {
    if((x >= 0 && x < array.length) && (y >= 0 && y < array.length)) {
        return false
    } else {
        return true
    }
}
var array_squre = function (array) {
    let zuobiao = {}
    for (let i = 0; i < array.length; i++) {
        let line = array[i]
        for (let j = 0; j < line.length; j++) {
            let item = line[j]
            if(item === 9) {
                zuobiao["top_left"] = {
                    x: i - 1,
                    y: j - 1,
                }
                zuobiao['tops'] = {
                    x: i - 1,
                    y: j,
                }
                zuobiao['top_right'] = {
                    x: i - 1,
                    y: j + 1,
                }
                zuobiao['left'] = {
                    x: i,
                    y: j - 1,
                }
                zuobiao['right'] = {
                    x: i,
                    y: j + 1,
                }
                zuobiao['buttom_right'] = {
                    x: i + 1,
                    y: j + 1,
                }
                zuobiao['buttom_left'] = {
                    x: i + 1,
                    y: j - 1,
                }
                zuobiao['buttom'] = {
                    x: i + 1,
                    y: j,
                }
                for (key in zuobiao) {
                    let o = zuobiao[key]
                    if(is_yuejie(array, o.x, o.y) || array[o.x][o.y] === 9 ) {
                        continue
                    } else {
                        array[o.x][o.y] += 1
                    }
                }
            }
        }
    }
    return array
}
let arr = squre(7)
array_squre(arr)
/*结果为:
(7) [Array(7), Array(7), Array(7), Array(7), Array(7), Array(7), Array(7)]
0: (7) [2, 9, 9, 9, 9, 9, 1]
1: (7) [9, 5, 9, 7, 9, 4, 2]
2: (7) [2, 5, 9, 9, 4, 9, 2]
3: (7) [2, 9, 9, 4, 4, 9, 4]
4: (7) [9, 6, 9, 3, 3, 9, 9]
5: (7) [9, 9, 4, 9, 3, 4, 3]
6: (7) [3, 9, 3, 2, 9, 2, 9]
*/
复制代码

for循环里面的of为key的值(value)

// 实现函数
/*students 是 array,里面的每个元素都是如下格式的 object
    {
        'name': 'gua',
        'sex': '男',
        'score': 127,
    }
    返回 score 最高的那个元素(object)
    */

var top1 = function(student_list) {
    var result = student_list[0]
    for (var student of student_list) {
        if (student.score > result.score) {
            result = student
        }
    }
    return result
}
var student_list = [
    {
        'name': 'gua1',
        'sex': '男',
        'score': 627,
    },
    {
        'name': 'gua2',
        'sex': '男',
        'score': 99,
    },
    {
        'name': 'gua3',
        'sex': '男',
        'score': 199,
    },
    {
        'name': 'gua4',
        'sex': '男',
        'score': 299,
    },
    {
        'name': 'gua5',
        'sex': '男',
        'score': 499,
    },
]
log(top1(student_list))
//结果为:
{name: "gua1", sex: "男", score: 627}
复制代码
   /*
    day 是代表星期的数字, 从周一到周日分别是 1 2 3 4 5 6 7
    返回 '星期一' '星期二' 这样的描述字符串
    */

var formated_weekday = function(day) {
    var wfzi = ['','一','二','三','四','五','六','七']
    return ('星期' + wfzi[day])
}
复制代码

in为数组中的下标

/*
price 是一个 int
grade 合法情况下一共 6 种取值, 还可能没有给出这个参数
    '小学生'
    '初中生'
    '高中生'
    '大学生'
    '研究生'
对应的折扣分别是 5 6 7 8 9
注意, 如果调用者没有给出 grade 参数, 没有折扣
返回折扣后的价格
*/
var discount = function(price, grade) {
    var dis = [10,5,6,7,8,9]
    var gra = [undefined,'小学生','初中生','高中生','大学生','研究生']
    var result = price
    for(var i in gra) {
        // i = Number(i)
        // log(gra[i],dis[i])
        if(gra[i] == grade) {
            result = price*dis[i]/10
            return result
        }
    }
}
discount(100, '小学生')
discount(100, '初中生')
//结果为:50  60
复制代码
/*
 array 是 array 类型, 里面的元素都是字符串

 按如下的格式返回这个 array
 假设 array 是 ['python', 'js', 'objective-c']
 那么返回的数据是一个数组, 多了首尾两个元素
 [
     '+++++++++++++++',
     '+ python      +',
     '+ js          +',
     '+ objective-c +',
     '+++++++++++++++',
 ]
 返回包含了 string 的 array
 */

var longest = function (array) {
    console.log('array', array)
    var long = array[0].length
    console.log('long', long)
    for (let i = 1; i < array.length; i++) {
        var n = array[i].length
        if (long < n) {
            long = n
        }
    }
    return long
}
var starEnd = function (array) {
    var lengths = longest(array)
    var star = ''
    for (var i = 0; i < lengths + 4; i++) {
        star += '+'
    }
    return star
}
var first = function (array) {
    for (var i = 0; i < array.length; i++) {
        array[i] = '+ ' + array[i]
    }
    return array
}
var end = function (array) {
    var len = longest(array) + 1 //len = 10
    for (var i = 0; i < array.length; i++) {
        var len1 = len - array[i].length
        for (var j = 0; j < len1; j++) {
            array[i] = array[i] + ' '
        }
        array[i] = array[i] + '+'
    }
    return array
}

var firstEnd = function (array) {
    return end(first(array))
}
var arrayReturn = function (array) {
    var n = []
    var border_arr = array.slice(0)
    n.push(starEnd(border_arr))
    let inners = firstEnd(array)
    for(value of inners) {
        n.push(value)
    }
    n.push(starEnd(border_arr))
    return n
}

var arrr = arrayReturn(['123','12345','12'])
console.log(arrr)
//结果为:
'+++++++++'
'+ 123   +'
'+ 12345 +'
'+ 12    +'
'+++++++++'
复制代码
分类:
阅读
标签: