题1
const arr = [2, 4, 6, 8, 10]
// 记录总数
let sum = 0
// 循环
for (let i = 0; i < arr.length; i = i + 1) {
// 取到每一项
const it = arr[i]
// 加到总数里
sum = sum + it
}
console.log(sum)
题2
const arr = ['y', 'o', 'o', 'o']
// 记录最终结果
let result = ''
// 循环,i++ 相当于 i = i + 1
for (let i = 0; i < arr.length; i++) {
// 取到每一项
const it = arr[i]
// 加到最终结果里,result += it 相当于 result = result + it
result += it
}
console.log(result)
题3
const arr = [1, 3, 2, 7, 6]
// 用一个数组盛放最终结果
let evens = []
// 循环,i++ 相当于 i = i + 1
for (let i = 0; i < arr.length; i++) {
// 取到每一项
const it = arr[i]
// 如果当前项与2求余等于0,就说明是偶数,
if (it % 2 === 0) {
// 那就应该添加到 evens 数组里
evens.push(it)
}
}
console.log(evens)
题4
// 用数组存放最终结果
const result = []
// 设置最大数,作为循环条件
const max = 5
// 从1开始,循环到5就结束
for (let i = 1; i <= max; i++) {
// 把每个数推到结果数组中
result.push(i)
}
console.log(result)
题5
const arr = ['a1', 'a2', ['b1', 'b2', ['c1', 'c2', 'c3'], 'b3'], 'a3']
// 用于记录爷爷,爸爸,孩子的数据
const grands = [] // 爷爷数组,这里面只装爷爷
const dads = [] // 爸爸数组,这里面只装爸爸
const children = [] // 孩子数组,这里面只装孩子
// 从最外层开始遍历
for (let i = 0; i < arr.length; i++) {
// 取到爷爷辈的元素
const grand = arr[i]
// 如果是字符串
if (typeof grand === 'string') {
// 就推到爷爷数组
grands.push(grand)
} else { // 否则肯定是嵌套数组
// 那就继续循环
for (let j = 0; j < grand.length; j++) {
// 取到爸爸辈的元素
const dad = grand[j]
// 如果是字符串
if (typeof dad === 'string') {
// 就推到爸爸数组
dads.push(dad)
} else { // 否则肯定是嵌套数组
// 那就继续循环
for (let k = 0; k < dad.length; k++) {
// 取到孩子辈的元素
const child = dad[i]
// 推到孩子数组
children.push(child)
}
}
}
}
}
// join() 可以将数组里的每一项连接成字符串,可以指定用什么连接
// 比如说
// ['a', 'b'].join('-') 会生成 'a-b'
// ['a', 'b'].join('@') 会生成 'a@b'
// 此处我们用 ', ' 来连接每一个以辈分分类的数组
const result = `
第1级:${grands.join(', ')}
第2级:${dads.join(', ')}
第3级:${children.join(', ')}
`
// 最后打印结果
console.log(result)
题6
const users = [
{
name: '王花花',
salary: 100,
},
{
name: '李拴蛋',
salary: 200,
},
{
name: '牛备备',
salary: 300,
},
]
// 准备结果数组
const result = []
// 遍历所有用户
for (let i = 0; i < users.length; i++) {
// 取到当前用户
let it = users[i]
// 如果其薪水大于100
if (it.salary > 100) {
// 就推到结果数组中
result.push(it)
}
}
console.log(result)
题7
const arr = [
{
name: '王花花',
},
{
name: '王拴蛋',
},
{
name: '牛备备',
},
]
// 准备结果
const result = []
// 遍历所有用户
for (let i = 0; i < arr.length; i++) {
const it = arr[i]
// 如果当前用户姓名以"王"开头
if (it.name.startsWith('王')) {
// 就推到结果数组中
result.push(it)
}
}
console.log(result)
题8
const arr = [
{
name: '王花花',
playing: ['CS', '红警'],
},
{
name: '李拴蛋',
playing: ['守望屁股', '吃鸡', 'CS'],
},
{
name: '牛备备',
playing: ['红警', '吃鸡'],
},
]
/**
* 单个关键词搜索
* @param {string} keyword
*/
function search(keyword) {
const result = []
// 循环每个用户
for (let i = 0; i < arr.length; i++) {
let user = arr[i]
// 看每个用户的 playing 中是否包含传进来的关键词
if (user.playing.includes(keyword)) {
// 如果包含,就把当前用户的名字推到结果中
result.push(user.name)
}
}
return result
}
console.log(search('CS'))
console.log(search('吃鸡'))
console.log(search('红警'))
console.log(search('守望屁股'))
题9
const arr = [
{
name: '王花花',
playing: ['CS', '红警'],
},
{
name: '李拴蛋',
playing: ['守望屁股', '吃鸡', 'CS'],
},
{
name: '牛备备',
playing: ['红警', '吃鸡'],
},
{
name: '木哈哈',
playing: ['红警', 'CS', '吃鸡'],
},
]
/**
* 严格搜索
* 满足所有keyword的搜索
* @param keywords
*/
function search(keywords) {
const result = []
// 遍历所有用户
for (let j = 0; j < arr.length; j++) {
const user = arr[j]
// 看这个用户玩的所有游戏是否(完全)包含所有 keyword
if (isSuperSet(user.playing, keywords)) {
// 如果包含就将用户名推进结果
result.push(user.name)
}
}
// 返回结果
return result
}
/**
* a 是否是 b 的超集
* 判断数组 a 是否完全包含数组 b 中的每一个元素(多出来没事儿)
* @param a {Array}
* @param b {Array}
* @return {boolean}
*/
function isSuperSet(a, b) {
// 假设结果为真
let is = true
// 循环子集 b
for (let i = 0; i < b.length; i++) {
// 取到子集中的每一个
let it = b[i]
// 如果有哪怕一个不存在于超集 a
if (!a.includes(it)) {
// 那么 a 就不是 b 的超集
is = false
// 那也没必要再循环下去了,终止循环
break
}
}
// 返回结果
return is
}
console.log(search(['CS', '红警']))
console.log(search(['吃鸡']))
console.log(search(['守望屁股', '吃鸡', 'CS']))
登录后评论