主页 > 互联网  > 

前端js题目大全

前端js题目大全
一、编写一个 JavaScript 函数 filterAndSortUsers,要求实现以下功能:

输入:一个包含用户对象的数组 users,每个用户对象的结构如下:

{ id: number, // 用户ID name: string, // 用户名 age: number, // 用户年龄 email: string // 用户邮箱 }

功能:

过滤出年龄大于等于 18 岁的用户。

将过滤后的用户按照年龄从小到大排序。

如果年龄相同,则按照 name 的字母顺序排序。

输出:返回过滤并排序后的用户数组。

示例:

const users = [ { id: 1, name: "Alice", age: 25, email: "alice@example " }, { id: 2, name: "Bob", age: 17, email: "bob@example " }, { id: 3, name: "Charlie", age: 25, email: "charlie@example " }, { id: 4, name: "David", age: 30, email: "david@example " }, { id: 5, name: "Eve", age: 16, email: "eve@example " } ]; const result = filterAndSortUsers(users); console.log(result);

输出结果:

[ { id: 1, name: "Alice", age: 25, email: "alice@example " }, { id: 3, name: "Charlie", age: 25, email: "charlie@example " }, { id: 4, name: "David", age: 30, email: "david@example " } ]

参考答案:

function filterAndSortUsers(users) { // 过滤出年龄大于等于 18 岁的用户 const filteredUsers = users.filter(user => user.age >= 18); // 按照年龄从小到大排序,如果年龄相同则按照 name 的字母顺序排序 filteredUsers.sort((a, b) => { if (a.age === b.age) { return a.name.localeCompare(b.name); // 按 name 字母顺序排序 } return a.age - b.age; // 按年龄从小到大排序 }); return filteredUsers; } // 测试用例 const users = [ { id: 1, name: "Alice", age: 25, email: "alice@example " }, { id: 2, name: "Bob", age: 17, email: "bob@example " }, { id: 3, name: "Charlie", age: 25, email: "charlie@example " }, { id: 4, name: "David", age: 30, email: "david@example " }, { id: 5, name: "Eve", age: 16, email: "eve@example " } ]; const result = filterAndSortUsers(users); console.log(result);

运行结果:

[ { id: 1, name: "Alice", age: 25, email: "alice@example " }, { id: 3, name: "Charlie", age: 25, email: "charlie@example " }, { id: 4, name: "David", age: 30, email: "david@example " } ]

考察点:

数组的 filter 方法:用于过滤符合条件的元素。

数组的 sort 方法:用于排序,注意排序规则的实现。

字符串的 localeCompare 方法:用于按字母顺序比较字符串。

对象属性的访问和比较。

 

二、编写一个 JavaScript 函数 groupByCategory,要求实现以下功能:

输入:一个包含商品对象的数组 products,每个商品对象的结构如下:

{ id: number, // 商品ID name: string, // 商品名称 category: string, // 商品分类 price: number // 商品价格 }

功能:

将商品按照 category 分类。

对于每个分类,计算该分类下商品的总价格。

返回一个对象,键为分类名称,值为该分类下商品的总价格。

输出:返回一个对象,格式如下:

{ "分类名称1": 总价格1, "分类名称2": 总价格2, ... }

示例:

const products = [ { id: 1, name: "iPhone", category: "Electronics", price: 999 }, { id: 2, name: "Samsung TV", category: "Electronics", price: 799 }, { id: 3, name: "Sofa", category: "Furniture", price: 500 }, { id: 4, name: "Chair", category: "Furniture", price: 100 }, { id: 5, name: "Table", category: "Furniture", price: 200 } ]; const result = groupByCategory(products); console.log(result);

输出结果:

{ "Electronics": 1798, "Furniture": 800 }

参考答案:

function groupByCategory(products) { return products.reduce((acc, product) => { // 如果分类不存在,则初始化为 0 if (!acc[product.category]) { acc[product.category] = 0; } // 累加当前分类的总价格 acc[product.category] += product.price; return acc; }, {}); } // 测试用例 const products = [ { id: 1, name: "iPhone", category: "Electronics", price: 999 }, { id: 2, name: "Samsung TV", category: "Electronics", price: 799 }, { id: 3, name: "Sofa", category: "Furniture", price: 500 }, { id: 4, name: "Chair", category: "Furniture", price: 100 }, { id: 5, name: "Table", category: "Furniture", price: 200 } ]; const result = groupByCategory(products); console.log(result);

运行结果:

{ "Electronics": 1798, "Furniture": 800 }

考察点:

数组的 reduce 方法:用于将数组元素累积为一个值(这里是对象)。

对象的动态属性访问:通过 acc[product.category] 动态访问和更新对象的属性。

条件判断:检查分类是否已存在,若不存在则初始化。

累加逻辑:对每个分类的价格进行累加。

三、编写一个 JavaScript 函数 flattenNestedArray,要求实现以下功能:

输入:一个嵌套的多维数组 arr,数组中的元素可以是任意类型(数字、字符串、对象、数组等)。

功能:将多维数组扁平化为一维数组。

输出:返回扁平化后的一维数组。

示例:

const nestedArray = [1, [2, [3, [4, 5], 6], 7], 8, [9, 10]]; const result = flattenNestedArray(nestedArray); console.log(result);

输出结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

参考答案:

function flattenNestedArray(arr) { return arr.flat(Infinity); } // 测试用例 const nestedArray = [1, [2, [3, [4, 5], 6], 7], 8, [9, 10]]; const result = flattenNestedArray(nestedArray); console.log(result);

运行结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

考察点:

flat():扁平化数组方法

Infinity:作为参数传入意味着将数组完全压平,直到所有嵌套的子数组都被展开,即不论数组有多深的嵌套层级,都将被完全展开。

标签:

前端js题目大全由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“前端js题目大全