详解JavaScript中的数组过滤

在JavaScript中,数组是一种非常常见的数据类型。有时候我们需要对数组中的元素进行过滤,去除一些不必要的、重复的或者特定的元素。本文将从多个方面对JavaScript中的数组过滤进行详细阐述。

一、JavaScript数组过滤对象

在JavaScript中,我们可以使用filter()方法过滤数组对象。该方法接收一个函数作为参数,该函数会对数组中的每一项进行判断,只有当函数返回true的时候,该项才会被保留在新数组中,否则该项会被过滤掉。

let arr = [
  {id: 1, name: 'Tom'},
  {id: 2, name: 'Jerry'},
  {id: 3, name: 'Tom'},
];

let newArr = arr.filter(item => item.name === 'Tom');

console.log(newArr);
// Output: [{id: 1, name: 'Tom'},{id: 3, name: 'Tom'}]

上面的例子中,我们使用了filter()方法从数组中找出了所有名字为Tom的对象,并将它们放入了一个新的数组中。

二、JavaScript数组过滤重复子集

在JavaScript中,如果我们有一个数组,该数组中的元素也是对象,我们可以使用set集合结构进行去重操作。在去重之前,我们需要将每个对象转化为JSON字符串,并且将该字符串存储到一个set集合中。最后我们再将set集合转化为数组得到去重后的结果。

let arr = [
  {id: 1, name: 'Tom'},
  {id: 2, name: 'Jerry'},
  {id: 1, name: 'Tom'},
];

let set = new Set(arr.map(JSON.stringify));
let newArr = Array.from(set).map(JSON.parse);

console.log(newArr);
// Output: [{id: 1, name: 'Tom'},{id: 2, name: 'Jerry'}]

上述例子中,我们使用了ES6中set集合的特性进行了去重操作,注意需要在map()方法中使用JSON.stringify()对每个对象进行处理。

三、JavaScript数组过滤方法

除了使用filter()方法,我们还可以使用其他方法来对JavaScript中的数组进行过滤,例如:

  • forEach() – 遍历数组,对每个元素进行处理
  • indexOf() – 获取指定元素在数组中的位置,如果不存在则返回-1
  • lastIndexOf() – 获取指定元素在数组中从后往前的位置,如果不存在则返回-1

下面我们来看一个使用indexOf()方法进行数组过滤的例子:

let arr = ['Tom', 'Jerry', 'Lucy', 'Tom'];

let newArr = [];

for(let i=0; i<arr.length; i++) {
  if(newArr.indexOf(arr[i]) === -1) {
    newArr.push(arr[i]);
  }
}

console.log(newArr);
// Output: ['Tom', 'Jerry', 'Lucy']

在上述例子中,我们使用了indexOf()方法遍历数组中的每一个元素,并且判断该元素在新数组中是否已经存在,如果不存在则将该元素加入新数组中。

四、JavaScript数组过滤取值

当我们需要从一个数组中获取特定的一些元素时,我们可以使用ES6中的destructuring(解构)语法进行获取,并且将不需要的元素过滤掉。

let arr = [
  {id: 1, name: 'Tom', age: 18},
  {id: 2, name: 'Jerry', age: 20},
  {id: 3, name: 'Lucy', age: 19},
];

let newArr = arr.map(({ id, name }) => ({ id, name }));

console.log(newArr);
// Output: [{id: 1, name: 'Tom'},{id: 2, name: 'Jerry'},{id: 3, name: 'Lucy'}]

在上述例子中,我们使用了map()方法对原数组进行操作,并利用解构语法对每个对象取出id和name属性,并且将其他属性过滤掉。

五、JavaScript数组过滤指定元素

有时我们需要从一个数组中过滤掉给定的几个元素,比如一个黑名单列表,我们需要将这些元素从数组中删除。可以使用filter方法过滤,排除不想要删除项,也可以使用splice函数对其进行删除操作。

// 使用filter过滤黑名单
let arr = ['Tom', 'Jerry', 'Lucy', 'Jack'];

let blacklist = ['Lucy', 'Jack'];
let newArr = arr.filter(item => !blacklist.includes(item));

console.log(newArr);
// Output: ['Tom', 'Jerry']

// 使用splice删除指定项
let arr1 = ['Tom', 'Jerry', 'Lucy', 'Jack'];

let index = arr1.indexOf('Lucy');
arr1.splice(index,1);

console.log(arr1);
// Output: ['Tom', 'Jerry', 'Jack']

上面的例子中,我们使用filter()方法将黑名单列表中的元素过滤掉,同时使用includes()方法判断一个元素是否在黑名单中;另外我们还使用splice()方法删除了指定元素。

六、JavaScript数组过滤中重复元素的方法

当数组中有重复的元素时,我们可以使用es6中提供的set数据结构进行去重操作,也可以自定义一个函数实现去重功能。

//使用Set去重
let arr = [1,2,3,3,4];
let set = new Set(arr);
let newArr = Array.from(set);

console.log(newArr);
// Output: [1, 2, 3,4]

//使用自定义函数去重
let arr1= [1,2,3,3,4,5];

function unique(arr) {
  let newArr = [];
  for(let i=0; i<arr.length; i++) {
    if(newArr.indexOf(arr[i]) === -1) {
      newArr.push(arr[i]);
    };
  };

  return newArr;
};

console.log(unique(arr1));
// Output: [1, 2, 3,4, 5]

在上述例子中,我们使用了Set数据结构对数组进行去重操作,并且使用Array.from()方法将Set转化为数组;另外我们还自定义了一个unique()函数实现了去重操作。

七、JavaScript数组过滤相同的对象

有时候我们需要从数组中过滤出仅在另一个数组中出现的对象,可以使用filter()方法组合includes()方法来实现这个目标。

let arr1 = [
  {id: 1, name: 'Tom'},
  {id: 2, name: 'Jerry'},
  {id: 3, name: 'Lucy'},
];

let arr2 = [
  {id: 1, name: 'Tom'},
  {id: 4, name: 'Jack'}
];

let newArr = arr1.filter(item => {
  return arr2.some(ele => JSON.stringify(ele) === JSON.stringify(item));
});

console.log(newArr);
// Output: [{id: 1, name: 'Tom'}]

上述例子中,我们将arr1和arr2两个数组进行比较,找出两个数组存在的相同元素,使用了ES6中的some()方法和JSON.stringify()方法。

八、JavaScript数组过滤重复的对象

在实际开发中,我们应该会遇到要将数组中的对象去重的需求。 ES6中提供了一个可以快速去重的方法,就是利用Set数据结构。但是需注意的是,Set只能自动去重基本数据类型,对于对象数组中的元素去重需要些小手脚。

let arr = [
  {id: 1, name: 'Tom'},
  {id: 2, name: 'Jerry'},
  {id: 1, name: 'Tom'}
];

let newArr = Array.from(new Set(arr.map((item) => JSON.stringify(item)))) //处理数据之前需要先stringify,不然遇到对象类型就去不了重了
  .map((item) => JSON.parse(item));//去重之后再parse还原

console.log(newArr);
// Output: [{id: 1, name: 'Tom'},{id: 2, name: 'Jerry'}]

在上述例子中,我们首先使用map()方法对数组中的对象进行JSON.stringify()处理,将每个对象转化为字符串形式,以支持Set的去重操作;接着我们将Set集合转化为数组形式,并且使用map()方法将每个元素重新处理成对象形式。

九、JavaScript数组过滤重复的元素

上文中讲解了如何对数组中的对象重复元素进行去重操作,我们通常的需求是基于某个字段去重。

//过滤重复
let arr = [1,2,3,3,4];

function fuzzyUnique(arr) {
  let unique=[];

  for(let i=0; i {
    if(!obj[data[keyStr]]) {
      obj[data[keyStr]] = 1;
      res.push(data);
    }
  });

  return res;
}

console.log(uniqueArr(personData, 'name'));
// Output: [{name: 'Tom', age: 18},{name: 'Jerry', age: 20},{name: 'Lucy', age: 18}]

在上述例子中,我们首先使用了自定义函数fuzzyUnique()进行基于元素的去重操作,以过滤掉重复的元素。接着我们使用了另一个自定义函数uniqueArr(),该函数接收两个参数,第一个参数是需要进行去重操作的数组,第二个参数是指定的去重字段。函数内部使用了对象字面量来对重复的元素进行去重操作。

原创文章,作者:UTUGF,如若转载,请注明出处:https://www.506064.com/n/315873.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
UTUGFUTUGF
上一篇 2025-01-09 12:13
下一篇 2025-01-09 12:14

相关推荐

  • Python导入数组

    本文将为您详细阐述Python导入数组的方法、优势、适用场景等方面,并附上代码示例。 一、numpy库的使用 numpy是Python中一个强大的数学库,其中提供了非常丰富的数学函…

    编程 2025-04-29
  • Python返回数组:一次性搞定多种数据类型

    Python是一种多用途的高级编程语言,具有高效性和易读性的特点,因此被广泛应用于数据科学、机器学习、Web开发、游戏开发等各个领域。其中,Python返回数组也是一项非常强大的功…

    编程 2025-04-29
  • Python去掉数组的中括号

    在Python中,被中括号包裹的数据结构是列表,列表是Python中非常常见的数据类型之一。但是,有些时候我们需要将列表展开成一维的数组,并且去掉中括号。本文将为大家详细介绍如何用…

    编程 2025-04-29
  • Python操作数组

    本文将从多个方面详细介绍如何使用Python操作5个数组成的列表。 一、数组的定义 数组是一种用于存储相同类型数据的数据结构。Python中的数组是通过列表来实现的,列表中可以存放…

    编程 2025-04-29
  • Python二维数组对齐输出

    本文将从多个方面详细阐述Python二维数组对齐输出的方法与技巧。 一、格式化输出 Python中提供了格式化输出的方法,可以对输出的字符串进行格式化处理。 names = [‘A…

    编程 2025-04-29
  • Java创建一个有10万个元素的数组

    本文将从以下方面对Java创建一个有10万个元素的数组进行详细阐述: 一、基本介绍 Java是一种面向对象的编程语言,其强大的数组功能可以支持创建大规模的多维数组以及各种复杂的数据…

    编程 2025-04-28
  • Python数组随机分组用法介绍

    Python数组随机分组是一个在数据分析与处理中常用的技术,它可以将一个大的数据集分成若干组,以便于进行处理和分析。本文将从多个方面对Python数组随机分组进行详细的阐述,包括使…

    编程 2025-04-28
  • Python数组索引位置用法介绍

    Python是一门多用途的编程语言,它有着非常强大的数据处理能力。数组是其中一个非常重要的数据类型之一。Python支持多种方式来操作数组的索引位置,我们可以从以下几个方面对Pyt…

    编程 2025-04-28
  • Python语言数组从大到小排序符号的用法介绍

    当我们使用Python进行编程的时候,经常需要对数组进行排序从而使数组更加有序,而数组的排序方式有很多,其中从大到小排序符号是一种常见的排序方式。本文将从多个方面对Python语言…

    编程 2025-04-28
  • 使用JavaScript日期函数掌握时间

    在本文中,我们将深入探讨JavaScript日期函数,并且从多个视角介绍其应用方法和重要性。 一、日期的基本表示与获取 在JavaScript中,使用Date对象来表示日期和时间,…

    编程 2025-04-28

发表回复

登录后才能评论