如何在JavaScript中将数组指定元素复制到另一个数组?
从对象数组中筛选并复制指定元素到新数组
原代码的问题
- 拼写错误:
original.lenght需改为original.length selected未初始化,直接赋值会报错,需先声明并初始化为空数组var selected = [];- 手动维护索引
k没必要,用数组的push方法更简洁
修复后的for循环实现
const original = [{name: "a", age: 20}, {name: "b", age: 25}, {name: "c", age: 30} ]; const selected = []; for(let i = 0; i < original.length; i++) { if(original[i].age > 22) { selected.push(original[i]); } } console.log(selected); // 输出: [{name: "b", age: 25}, {name: "c", age: 30}]
更简洁的filter方法实现
ES6及以上版本可直接用数组filter方法,一行完成筛选:
const original = [{name: "a", age: 20}, {name: "b", age: 25}, {name: "c", age: 30} ]; const selected = original.filter(item => item.age > 22); console.log(selected); // 输出: [{name: "b", age: 25}, {name: "c", age: 30}]
注意:浅拷贝与深拷贝
上面的方法都是浅拷贝,新数组中的对象和原数组对象共享同一引用,修改新数组对象的属性会影响原数组:
selected[0].age = 26; console.log(original[1].age); // 输出26
如果需要完全独立的深拷贝,可使用以下方式:
// 方法1: JSON序列化(注意:无法处理函数、Symbol等特殊类型) const selected = original.filter(item => item.age > 22).map(item => JSON.parse(JSON.stringify(item))); // 方法2: 展开运算符(适用于单层对象) const selected = original.filter(item => item.age > 22).map(item => ({...item})); // 方法3: Object.assign(同展开运算符,适用于单层对象) const selected = original.filter(item => item.age > 22).map(item => Object.assign({}, item));
内容的提问来源于stack exchange,提问作者user9805040
相关产品推荐
相关产品推荐

