常见的数组方法&对象的方法

### 常见的数组方法

1. **`push()`**
   - 在数组末尾添加一个或多个元素,并返回新数组的长度。
   - 例子:`arr.push(1, 2, 3);`

2. **`pop()`**
   - 删除数组的最后一个元素,并返回该元素。
   - 例子:`arr.pop();`

3. **`shift()`**
   - 删除数组的第一个元素,并返回该元素。
   - 例子:`arr.shift();`

4. **`unshift()`**
   - 在数组开头添加一个或多个元素,并返回新数组的长度。
   - 例子:`arr.unshift(1, 2);`

5. **`concat()`**
   - 合并两个或多个数组,不改变现有数组,返回一个新数组。
   - 例子:`let newArr = arr.concat([4, 5, 6]);`

6. **`slice()`**
   - 返回数组的一个子集,不改变原数组。
   - 例子:`let newArr = arr.slice(1, 3);`

7. **`splice()`**
   - 添加、删除或替换数组中的元素。此方法会改变原数组。
   - 例子:`arr.splice(1, 2, 'a', 'b');`

8. **`indexOf()`**
   - 返回指定元素在数组中的第一个索引,如果不存在则返回 -1。
   - 例子:`let index = arr.indexOf(2);`

9. **`lastIndexOf()`**
   - 返回指定元素在数组中的最后一个索引,如果不存在则返回 -1。
   - 例子:`let index = arr.lastIndexOf(2);`

10. **`forEach()`**
    - 对数组中的每个元素执行一次提供的函数。
    - 例子:`arr.forEach(item => console.log(item));`

11. **`map()`**
    - 创建一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
    - 例子:`let newArr = arr.map(item => item * 2);`

12. **`filter()`**
    - 创建一个新数组,包含通过所提供函数测试的所有元素。
    - 例子:`let newArr = arr.filter(item => item > 2);`

13. **`reduce()`**
    - 对数组中的每个元素执行一个由您提供的 reducer 函数,将其结果汇总为单个值。
    - 例子:`let sum = arr.reduce((acc, item) => acc + item, 0);`

14. **`reduceRight()`**
    - 从右到左执行 reduce 操作。
    - 例子:`let sum = arr.reduceRight((acc, item) => acc + item, 0);`

15. **`some()`**
    - 检查数组中是否至少有一个元素通过所提供的函数测试。返回布尔值。
    - 例子:`let hasPositive = arr.some(item => item > 0);`

16. **`every()`**
    - 检查数组中的所有元素是否都通过所提供的函数测试。返回布尔值。
    - 例子:`let allPositive = arr.every(item => item > 0);`

17. **`find()`**
    - 返回数组中满足提供的测试函数的第一个元素的值。
    - 例子:`let found = arr.find(item => item > 2);`

18. **`findIndex()`**
    - 返回数组中满足提供的测试函数的第一个元素的索引。
    - 例子:`let index = arr.findIndex(item => item > 2);`

19. **`sort()`**
    - 对数组中的元素进行排序并返回数组。
    - 例子:`arr.sort((a, b) => a - b);`

20. **`reverse()`**
    - 颠倒数组中元素的顺序,并返回该数组。
    - 例子:`arr.reverse();`

21. **`join()`**
    - 将数组的所有元素连接成一个字符串。
    - 例子:`let str = arr.join(', ');`

22. **`includes()`**
    - 判断一个数组是否包含一个指定的值,根据情况返回 true 或 false。
    - 例子:`let hasItem = arr.includes(2);`

23. **`flat()`**
    - 按指定深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组。
    - 例子:`let newArr = arr.flat(2);`

24. **`flatMap()`**
    - 首先使用 map 函数映射每个元素,然后将结果压缩成一个新数组。
    - 例子:`let newArr = arr.flatMap(item => [item, item * 2]);`

25. **`fill()`**
    - 用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。
    - 例子:`arr.fill(0, 2, 4);`

26. **`copyWithin()`**
    - 从数组的一部分浅复制到同一数组中的另一个位置,并返回它,不会改变数组的长度。
    - 例子:`arr.copyWithin(0, 3, 5);`

这些方法都是原生 JavaScript 的数组操作方法,可以在 Vue 3 中直接使用。

### 创建和操作对象的方法

1. **`Object.create(proto, [propertiesObject])`**
   - 使用指定的原型对象和可选的属性描述符来创建一个新的对象。
   - 例子:`let newObj = Object.create(proto);`

2. **`Object.assign(target, ...sources)`**
   - 将一个或多个源对象的所有可枚举属性复制到目标对象,返回修改后的目标对象。
   - 例子:`let newObj = Object.assign({}, obj1, obj2);`

3. **`Object.defineProperty(obj, prop, descriptor)`**
   - 为对象添加一个属性,并为该属性设置描述符(如可枚举性、可配置性等)。
   - 例子:`Object.defineProperty(obj, 'key', { value: 42, writable: false });`

4. **`Object.defineProperties(obj, props)`**
   - 为对象定义多个属性,每个属性都有自己的描述符。
   - 例子:`Object.defineProperties(obj, { key1: { value: 42 }, key2: { value: 'foo' } });`

### 获取对象信息的方法

5. **`Object.keys(obj)`**
   - 返回一个包含对象自身可枚举属性名称的数组。
   - 例子:`let keys = Object.keys(obj);`

6. **`Object.values(obj)`**
   - 返回一个包含对象自身可枚举属性值的数组。
   - 例子:`let values = Object.values(obj);`

7. **`Object.entries(obj)`**
   - 返回一个包含对象自身可枚举属性的键值对数组。
   - 例子:`let entries = Object.entries(obj);`

8. **`Object.getOwnPropertyNames(obj)`**
   - 返回一个包含对象自身所有属性名称(包括不可枚举属性)的数组。
   - 例子:`let propNames = Object.getOwnPropertyNames(obj);`

9. **`Object.getOwnPropertyDescriptor(obj, prop)`**
   - 返回指定对象属性的属性描述符。
   - 例子:`let descriptor = Object.getOwnPropertyDescriptor(obj, 'key');`

10. **`Object.getOwnPropertyDescriptors(obj)`**
    - 返回指定对象所有自身属性的属性描述符对象。
    - 例子:`let descriptors = Object.getOwnPropertyDescriptors(obj);`

11. **`Object.getPrototypeOf(obj)`**
    - 返回指定对象的原型(即内部的 `[[Prototype]]`)。
    - 例子:`let proto = Object.getPrototypeOf(obj);`

12. **`Object.is(obj1, obj2)`**
    - 判断两个值是否是同一个值。
    - 例子:`let isEqual = Object.is(0, -0); // false`

13. **`Object.hasOwn(obj, prop)`**
    - 判断对象是否具有指定的自身属性,区别于 `in` 操作符的是它不检查原型链。
    - 例子:`let hasOwn = Object.hasOwn(obj, 'key');`

### 设置和删除对象属性的方法

14. **`Object.setPrototypeOf(obj, proto)`**
    - 设置对象的原型(`[[Prototype]]`),并返回该对象。
    - 例子:`Object.setPrototypeOf(obj, proto);`

15. **`Object.freeze(obj)`**
    - 冻结对象:阻止对象的新属性添加,并将所有现有属性标记为不可配置和不可写的(不可变对象)。
    - 例子:`Object.freeze(obj);`

16. **`Object.seal(obj)`**
    - 封闭对象:阻止添加新属性,并将所有现有属性标记为不可配置,但可以修改现有属性的值。
    - 例子:`Object.seal(obj);`

17. **`Object.preventExtensions(obj)`**
    - 阻止对象扩展:禁止向对象添加新属性。
    - 例子:`Object.preventExtensions(obj);`

18. **`Object.isFrozen(obj)`**
    - 判断对象是否被冻结。
    - 例子:`let isFrozen = Object.isFrozen(obj);`

19. **`Object.isSealed(obj)`**
    - 判断对象是否被封闭。
    - 例子:`let isSealed = Object.isSealed(obj);`

20. **`Object.isExtensible(obj)`**
    - 判断对象是否可扩展。
    - 例子:`let isExtensible = Object.isExtensible(obj);`

### 遍历和比较对象的方法

21. **`Object.fromEntries(iterable)`**
    - 将键值对列表(如 `Map` 对象或二维数组)转换为对象。
    - 例子:`let obj = Object.fromEntries([['a', 1], ['b', 2]]);`

22. **`Object.prototype.hasOwnProperty(prop)`**
    - 判断对象是否具有指定的自身属性。
    - 例子:`let hasProp = obj.hasOwnProperty('key');`

23. **`Object.prototype.propertyIsEnumerable(prop)`**
    - 判断对象的某个属性是否可枚举。
    - 例子:`let isEnumerable = obj.propertyIsEnumerable('key');`

24. **`Object.prototype.isPrototypeOf(obj)`**
    - 判断一个对象是否存在于另一个对象的原型链上。
    - 例子:`let isProto = proto.isPrototypeOf(obj);`

25. **`Object.prototype.toString()`**
    - 返回对象的字符串表示,通常用于调试。
    - 例子:`let str = obj.toString();`

26. **`Object.prototype.valueOf()`**
    - 返回指定对象的原始值。
    - 例子:`let value = obj.valueOf();`

这些方法帮助您在 JavaScript 中创建、操作、遍历和比较对象,适用于各种对象处理需求。

对象数组转json对象方法有多种方式。 1. 使用JSON库:可以使用现有的JSON库,如json-lib、fastjson等,首先将对象数组转换成java.util.List对象,然后使用JSON库将List对象转换成JSON字符串,最后再将JSON字符串转换成JSON对象。例如使用fastjson库的代码如下: ``` import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class Main { public static void main(String[] args) { // 假设有一个对象数组 Person[] persons = new Person[2]; persons[0] = new Person("张三", 20); persons[1] = new Person("李四", 30); // 将对象数组转换成JSONArray JSONArray jsonArray = (JSONArray) JSONArray.toJSON(persons); // 将JSONArray转换成JSONObject JSONObject jsonObject = new JSONObject(); jsonObject.put("persons", jsonArray); // 输出JSON对象 System.out.println(jsonObject.toJSONString()); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // getter和setter方法 } ``` 2. 手动拼接:也可以手动拼接JSON字符串,遍历对象数组的每个对象,将其属性值拼接成键值对的形式,再将这些键值对拼接成JSON字符串。例如: ``` public class Main { public static void main(String[] args) { // 假设有一个对象数组 Person[] persons = new Person[2]; persons[0] = new Person("张三", 20); persons[1] = new Person("李四", 30); // 手动拼接JSON字符串 StringBuilder json = new StringBuilder(); json.append("["); for (int i = 0; i < persons.length; i++) { json.append("{\"name\": \"").append(persons[i].getName()).append("\", \"age\": ").append(persons[i].getAge()).append("}"); if (i < persons.length - 1) { json.append(","); } } json.append("]"); // 输出JSON字符串 System.out.println(json.toString()); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // getter和setter方法 } ``` 以上是两种常见的将对象数组转换成JSON对象方法,可以根据实际需要选择适合的方式进行处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值