使用 JavaScript 过滤关联数组
在本问题陈述中,我们的任务是编写一个 JavaScript 程序,通过该程序我们可以简单地使用另一个数组过滤关联数组。在讨论给定问题的解决方案之前,让我们首先熟悉关联数组。
什么是关联数组?
关联数组是一种数据结构,用于存储键值对。其中每个键都与赋给该键的值相关联。此数组中的键是唯一标识符,可用于检索其相应的值。在关联数组中,键没有数字索引。键可以是任何字符串或数值。当我们需要根据非数字键访问数据时,可以使用此类数组。
在JavaScript中,对象是一种关联数组,因为它们存储键值对,其中键可以是任何字符串或符号。让我们来看一个例子。
const customer = { name: 'Rishi', age: 25, city: 'Mumbai' };
使用 filter() 和 includes() 方法
在这种方法中,声明一个过滤器条件,它将充当另一个数组来过滤给定的数据数组。借助filter()方法,我们将过滤给定数组中包含上述条件数组名称的项。并将结果存储在已过滤的数组中。
示例
让我们看看上述方法的实际实现:
//define data with name and age const data = [ { name: 'Anita', age: 45 }, { name: 'Tanvi', age: 20 }, { name: 'Bittu', age: 32 } ]; //filter data on certain criteria const filterCriteria = ['Anita', 'Bittu']; const filteredData = data.filter(item => filterCriteria.includes(item.name)); console.log(filteredData);
上述代码的输出为:
[ { name: 'Anita', age: 45 }, { name: 'Bittu', age: 32 } ]
复杂度
上述方法所花费的时间为 O(n),其中 n 是数据数组中对象的个数。空间复杂度也是 O(n),因为我们创建了一个新数组来存储已过滤的对象。
使用 filter() 和 some() 方法
这是使用另一个数组过滤关联数组的另一种方法。在这里,filter() 方法创建一个新数组,其中包含通过提供的函数实现的测试的所有元素。然后,some() 方法测试数组中至少有一个元素是否通过提供的函数实现的测试。
示例
在这个例子中,我们使用 filter() 和 some() 方法在 JavaScript 中使用另一个数组过滤关联数组。
// define an associative array const data = [ { name: 'Anita', age: 45 }, { name: 'Tanvi', age: 20 }, { name: 'Bittu', age: 32 } ]; // define the array to filter with const filterCriteria = [20]; // custom filter function function filterWithArray(item, filter) { return filter.some(filterItem => filterItem === item.age); } // filter the associative array const filteredData = data.filter(item => filterWithArray(item, filterCriteria)); console.log(filteredData);
运行上述代码后,将显示以下输出:
[ { name: 'Tanvi', age: 20 } ]
复杂度
上述代码的时间复杂度为 O(n * m),其中 n 是 data 数组中的元素个数,m 是 filterCriteria 数组中的元素个数。辅助空间复杂度为 O(1)。
广告