javascript - JS:如何创建返回相同价格范围内所有餐厅列表的函数?
问题描述
我有一个具有创建餐厅和价格范围功能的程序,我需要返回功能相同价格范围的所有餐厅,我不知道如何?这是我的代码,函数名称是 findRestaurantsByPriceRange,我正在尝试检查范围类别是否相同,但不确定如何?注意:不允许使用过滤器。如果可能的话,我想用 for 或 foreach 来做?
function createRestaurant(name, address, averageMealPrice, numberOfTable, category, priceRange, size) {
return { name, address, averageMealPrice, numberOfTable, category, priceRange, size };
}
function createCategory(type) {
return { type };
}
function createSizeOfRestaurant(size) {
return { size };
}
let category1 = createCategory(['Chinese', 'International']);
let category2 = createCategory(['Fast food', 'Middle Eastern']);
let category3 = createCategory(['Balkan', 'Indian']);
let size1 = createSizeOfRestaurant('small');
let size2 = createSizeOfRestaurant('medium');
let size3 = createSizeOfRestaurant('big');
//THIS IS RANGE
let range = ['inexpensive', 'moderate', 'expensive'];
let restaurant1 = createRestaurant('Rosetto', 'Bulevar Oslobodjenja 2', 500, 20, category1, range[0], size1);
let restaurant2 = createRestaurant('Rosetto', 'Bulevar Oslobodjenja 2', 500, 20, category2, range[1], size2);
let restaurant3 = createRestaurant('Rosetto', 'Bulevar Oslobodjenja 2', 500, 20, category3, range[2], size3);
let restaurants = [restaurant1, restaurant2, restaurant3];
function findRestaurantsByPriceRange(restaurantByPrice, category) {
const result = [];
for (let i = 0; i < restaurantByPrice.length; i++) {
let valid = false;
const restaurant = restaurantByPrice[i];
// To break the loop without it going through all the items in the array, I check if valid has been set to true. If so, the loop breaks
for (let j = 0;
(j < restaurant.category.type.length && valid === false); j++) {
const restaurantCategory = restaurant.category.type[j];
if (restaurantCategory === category) {
valid = true;
}
}
if (valid === true) result.push(restaurant)
}
return result;
}
function findRestaurantByCategory(restaurantsByCategory, category) {
const result = [];
for (let i = 0; i < restaurantsByCategory.length; i++) {
let valid = false;
const restaurant = restaurantsByCategory[i];
for (let j = 0; (j < restaurant.category.type.length && valid === false); j++) {
const restaurantCategory = restaurant.category.type[j];
if (restaurantCategory === category) {
valid = true;
}
}
if (valid === true) result.push(restaurant)
}
return result;
}
function findRestaurantsBySize(restaurantsBySize, size){
const result = [];
for (let i = 0; i < restaurantsBySize.length; i++) {
let valid = false;
const restaurant = restaurantsBySize[i];
for (let j = 0; (j < restaurant.size.type.length && valid === false); j++) {
const restaurantSize = restaurant.size.type[j];
if (restaurantSize === size) {
valid = true;
}
}
if (valid === true){
result.push(restaurant)
}
}
return result;
}
console.log(findRestaurantByCategory(restaurants, 'Chinese'))
console.log(findRestaurantsBySize(restaurants, 'small'));
解决方案
Array#includes
并Array#some
与前两种方法一起使用
使用Array#filter
function findRestaurantsByPriceRange(restaurantByPrice, category){
return restaurantByPrice.filter(({ category: restaurantCategory }) => restaurantCategory.some(item => category.type.includes(item)));
}
使用Array#reduce
function findRestaurantsByPriceRange(restaurantByPrice, category) {
return restaurantByPrice.reduce((acc, restaurant) => {
acc.push(restaurant.category.some(item => category.type.includes(item)) ? restaurant : ...[])
return acc;
}, []);
}
使用for
循环
在这里,您必须遍历restaurantByPrice
数组及其category
数组,使用标志来检查是否有任何餐厅的类别与传递给函数的类别匹配。
function findRestaurantsByPriceRange(restaurantByPrice, category) {
const result = [];
for (let i = 0; i < restaurantByPrice.length; i++) {
let valid = false;
const restaurant = restaurantByPrice[i];
// To break the loop without it going through all the items in the array, I check if valid has been set to true. If so, the loop breaks
for (let j = 0; (j < restaurant.category.length && valid === false); j++) {
const restaurantCategory = restaurant.category[j];
if (restaurantCategory === category) {
valid = true;
}
}
if (valid === true) result.push(restaurant)
}
function createRestaurant(name, address, averageMealPrice, numberOfTable, category, priceRange, size) {
return { name, address, averageMealPrice, numberOfTable, category, priceRange, size };
}
function createCategory(type) {
return { type };
}
function createSizeOfRestaurant(size) {
return { size };
}
let category1 = createCategory(['Chinese', 'International']);
let category2 = createCategory(['Fast food', 'Middle Eastern']);
let category3 = createCategory(['Balkan', 'Indian']);
let size1 = createSizeOfRestaurant('small');
let size2 = createSizeOfRestaurant('medium');
let size3 = createSizeOfRestaurant('big');
//THIS IS RANGE
let range = ['inexpensive', 'moderate', 'expensive'];
let restaurant1 = createRestaurant('Rosetto', 'Bulevar Oslobodjenja 2', 500, 20, category1, range[0], size1);
let restaurant2 = createRestaurant('Rosetto', 'Bulevar Oslobodjenja 2', 500, 20, category2, range[1], size2);
let restaurant3 = createRestaurant('Rosetto', 'Bulevar Oslobodjenja 2', 500, 20, category3, range[2], size3);
let restaurants = [restaurant1, restaurant2, restaurant3];
function findRestaurantsByPriceRange(restaurantByPrice, category) {
const result = [];
for (let i = 0; i < restaurantByPrice.length; i++) {
let valid = false;
const restaurant = restaurantByPrice[i];
// To break the loop without it going through all the items in the array, I check if valid has been set to true. If so, the loop breaks
for (let j = 0;
(j < restaurant.category.type.length && valid === false); j++) {
const restaurantCategory = restaurant.category.type[j];
if (restaurantCategory === category) {
valid = true;
}
}
if (valid === true) result.push(restaurant)
}
return result;
}
console.log(findRestaurantsByPriceRange(restaurants, 'Chinese'))
检查size
function findRestaurantsByPriceRange(restaurantByPrice, size) {
const result = [];
for (let i = 0; i < restaurantByPrice.length; i++) {
const restaurant = restaurantByPrice[i];
if (restaurant.size.size === size) result.push(restaurant);
}
return result;
}
推荐阅读
- python - 如何使用 pathlib.Path.expanduser() 并修改和使用 PosixPath 值?
- javascript - 在 href 中动态传递文件 url
- javascript - 从公共文件中调用 angular Observable.subscribe()
- php - 为什么在提交时我的表单上有 CSRF Token 错误?
- java - 处理多个类型视图单击 RecyclerView
- reactjs - 从列表中选择项目时如何显示内容
- java - 读取联系人仅显示来自电子邮件存储的联系人
- machine-learning - lstm(256) + lstm(256) 和 lstm(512) 有什么区别?
- python - 如何在 python 中修复 sock.recv() 阻塞状态
- react-native - `unable to resolve module @react-native-community/async-storage` 破坏了我的 React Native 环境