使用 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)。

更新于:2024年9月11日

826 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告