JS数组对象常用方法

本文详细介绍了JavaScript中数组的新增方法,包括forEach、filter、some、find、findIndex、indexOf及其区别,以及字符串的trim和includes方法。此外,还讲解了对象的Object.defineProperty方法用于定义或修改属性,并探讨了keys方法。这些方法在实际编程中有着广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数组新增方法

1.1 forEach 方法 迭代或者遍历

没有返回值,本质上等同于 for 循环,
不支持 continue,用 return false 或 return true 代替。
不支持 break,用 try catch/every/some 代替,详情见JavaScript forEach() 方法

array.forEach(function(currentvalue, Index, arr))

arr.forEach 过后,就开始便利数组,里边的 funciton 是回调函数

  • currentvalue:数组当前项的值
  • index:数组当前项的索引
  • arr:数组对象本身

示例:

 // forEach  迭代(遍历)数组
 let arr = [1,2,3]
 arr.forEach(function (value,index,array){
   console.log(`第${index}个,值是:${value},隶属于${array}`);
 })

结果:
在这里插入图片描述
案例,求和:

let arr = [1,2,3]
let sum = 0
arr.forEach(value => sum+=value)
console.log(sum); // 6

1.2 filter 过滤数组

array.filter(function(currentValue,index,arr))

  • filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有素组, 主要用于筛选数组

  • 注意: 它直接返回一个新数组

  • currentValue :数组当前项的值

  • index: 数组当前项的索引

  • arr: 数组对象本身

实例:

// filter 过滤or筛选数组
let arr = [12, 64, 88, 7,8,9,13,100, 5, 10]
let newArr = arr.filter(function (value, index) {
  // return value >= 20  // 取出大于等于20的数
  return value % 2 == 0  //取出所有偶数
})
console.log(newArr); //[12, 64, 88, 8, 100, 10]

1.3 some 返回布尔值

array.some(function(currentvalue, index, array))

some()方法用于检测数组中是否有满足条件的元素

注意 :它返回值是布尔值,如果查找到这个元素,就返回true,如果查找不到返回 false

如果找到第一个满足条件的元素则 终止循环 不在继续查找

  • currentvalue:数组当前项的值
  • index:数组当前项的索引
  • array:数组对象本身

some 与 filter 的区别:

  • filter 査找满足条件的元素返回的是一个数组而且是把所有满足条件的元素返回回来
  • some也是查找满足条件的元素是否存在,返回的是一个布尔值,如果查找到第一个满足条件的元素就终止循环

1.4 find 返回第一个元素值 或者 undefined

find() 方法返回数组中满足条件第一个元素的值。否则返回 undefined。

const array1 = [5, 12, 8, 130, 44];

const found = array1.find(element => element > 10);

console.log(found);// 12
let ary = [{
  id: 1,
  name: "张三"
}, {
  id: 2,
  name: "李四"
}];
let target = ary.find(item => item.id == 2)
console.log(target); // {id: 2, name: "李四"}

1.5 findIndex 返回第一个索引或者 -1

findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1。

const array1 = [5, 12, 8, 130, 44];

const isLargeNumber = (element) => element > 13;

console.log(array1.findIndex(isLargeNumber));//3

1.6 indexOf 返回第一个索引

indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

console.log(beasts.indexOf('bison'));
// expected output: 1

// start from index 2
console.log(beasts.indexOf('bison', 2));
// expected output: 4

console.log(beasts.indexOf('giraffe'));
// expected output: -1

1.7 findIndex 与 indexOf 对比

1、findIndex()和indexOf方法实现都是通过循环遍历查找。

2、findIndex()的应用场景要比indexOf广泛一些可以查找大于等于小于,表达式可以随便写,indexOf就只能在第一层查找相等的值。

3、findIndex()实际上相当于一个for循环,只不过找到了你不需要自己退出。

1.8 trim 去除字符串两端空白

去除两端的空白字符,返回一个新的字符串

//  trim() 去除字符串两端的空白
let str = "  andy   "
console.log(str);
let newStr = str.trim()
console.log(newStr);

效果:
在这里插入图片描述

1.9 includes 是否包含指定元素

includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。

注意 使用 includes()比较字符串和字符时是区分大小写。

语法:
arr.includes(valueToFind[, fromIndex])
valueToFind

  • 需要查找的元素值。

fromIndex 可选

  • 从fromIndex 索引处开始查找 valueToFind。如果为负值,则按升序从 array.length + fromIndex 的索引开始搜 (即使从末尾开始往前跳 fromIndex 的绝对值个索引,然后往后搜寻)。默认为 0。
console.log([1,2,3].includes(2)) // true
console.log([1,2,3].includes(4)) // false

二、对象新增的方法

2.1 Object.defineProperty方法

为指定对象设置或修改属性。

Object.defineProperty(obj,prop,descriptor)

  • obj:必需。目标对象
  • prop:必需。需定义或修改的属性的名字
  • descriptor:必需。目标属性所拥有的特性

Object. defineproperty{}第三个参数 descriptor说明:以对象形式{}书写

  • value:设置属性的值默认为 undefined
  • writable:值是否可以重写。 默认为 afalse
  • enumerable:目标属性是否可以被枚举。默认为 false
  • configurable:目标属性是否可以被删除或是否可以再次修改特性,默认为 false

示例:

// Object.defineProperty()  定义新属性或修改原有的属性
let obj = {
  id: 1,
  pname: "小米",
  price: 1999
}

// 新增
Object.defineProperty(obj, 'num', {
  value: 1000,
})
// 修改
Object.defineProperty(obj, 'pname', {
  value: "华为"
})
// 设置权限
Object.defineProperty(obj, 'id', {
  // writable 不允许修改  默认值:false
  writable: false
})

// enumerable是否可遍历  configurable可删除或修改特性
Object.defineProperty(obj, 'address', {
  value: "中国山东",
  // 是否可重写
  writable: false,
  // enumerable默认值为false  不允许遍历
  enumerable: false,
  // configurable 如果为false 则不能删除属性或修改特性 默认为false 
  configurable: false
})
Object.defineProperty(obj, 'address', {
  value: "中国山东",
  // enumerable: true, //再次修改会报错
})


obj.id = 2 // 没效果,改不动  因为 writable 为 false
delete obj.address //删除没效果  因为 configurable 为false  能删除属性或修改特性

console.log(obj); // {id: 1, pname: "华为", price: 1999, num: 1000, address: "中国山东"}
console.log(Object.keys(obj)); //["id", "pname", "price"]

在我们最后 console.log(Object.keys(obj))的时候,可以发现 居然只有三个keynumaddress都不见了,这是为什么呢?

答案是因为 enumerable设置为了false(默认即为false),该属性被设置为了false的值不能被枚举(遍历),所以只有三个key

2.2 keys 方法

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组。

示例:

var obj = {
    id: 1,
    pname: '小米',
    price: 1999,
    num: 2000
};
var arr = Object.keys(obj);
console.log(arr);
arr.forEach(function(value) {
    console.log(obj[value]);
})

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优雅哥cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值