You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:33:51