Javascript JS-满足条件时将对象从数组复制到新数组[已编辑]

Javascript JS-满足条件时将对象从数组复制到新数组[已编辑],javascript,Javascript,我要做的是过滤数组并在新数组中写入所选元素。之前我看到了两种可能的方法,但由于下面的评论,我意识到从数组中删除元素的方法并不好。因此,我需要做的是将一些元素(即,包含“科学”类别的所有元素)复制到新元素。我的第一个问题是:哪种方法更好?更有效率?谢谢你的帮助! 现在是第二个问题。如何将元素从阵列复制到新阵列?仅复制id为0的book name表单元素不是问题。但当我试图将id、名称、类别、价格和图像完全相同的表单复制到新数组时,尝试失败了 我的阵列是: var产品= [ { “id”:“0”,

我要做的是过滤数组并在新数组中写入所选元素。之前我看到了两种可能的方法,但由于下面的评论,我意识到从数组中删除元素的方法并不好。因此,我需要做的是将一些元素(即,包含“科学”类别的所有元素)复制到新元素。我的第一个问题是:哪种方法更好?更有效率?谢谢你的帮助! 现在是第二个问题。如何将元素从阵列复制到新阵列?仅复制id为0的book name表单元素不是问题。但当我试图将id、名称、类别、价格和图像完全相同的表单复制到新数组时,尝试失败了

我的阵列是:

var产品=
[
{
“id”:“0”,
“名称”:“书名”,
“类别”:“科学”,
“价格”:“$49,99”,
“图像”:“img/product-1.png”
},
{
“id”:“1”,
“名称”:“书名2”,
“类别”:“计算机”,
“价格”:“$319”,
“图片”:“img/product-2.png”
},
{
“id”:“2”,
“名称”:“书名3”,
“类别”:[“科学”、“编程”、“计算机”],
“价格”:“$49,99”,
“图像”:“img/product-1.png”
}

]
使用
forEach
应该在不处理索引的情况下完成这项工作,从而减少出错的可能性

let resArray = []; // Filtered result array
products.forEach((el) => {
  if (el.id === "0") { // Whatever condition you want
    resArray.push(el);
  }
})

使用
forEach
可以在不处理索引的情况下实现这一点,从而减少出错的可能性

let resArray = []; // Filtered result array
products.forEach((el) => {
  if (el.id === "0") { // Whatever condition you want
    resArray.push(el);
  }
})

数组是基于偏移量的,这意味着它们的索引从0开始。所以你的console.log部分从1到3似乎是个问题。即使索引是正确的,如果你从数组中删除一个元素,当你试图在一个未定义的变量上引用name元素时,你的一个console日志语句会出错。是的,我明白你的意思。我的数组较长,所以这不是问题。我正在使用日志检查是否已删除某些内容。但不幸的是,尽管事实上,如果在“for”循环中,我删除了一个索引为“I”的元素,那么所有后续元素的索引都将减少1,因此在下一次迭代中,将跳过一个元素,并且在最后不会搜索所有元素。最好将过滤后的元素写入新数组中,问题是在这种数组中如何执行?数组是基于偏移量的,这意味着它们的索引从0开始。所以你的console.log部分从1到3似乎是个问题。即使索引是正确的,如果你从数组中删除一个元素,当你试图在一个未定义的变量上引用name元素时,你的一个console日志语句会出错。是的,我明白你的意思。我的数组较长,所以这不是问题。我正在使用日志检查是否已删除某些内容。但不幸的是,尽管事实上,如果在“for”循环中,我删除了一个索引为“I”的元素,那么所有后续元素的索引都将减少1,因此在下一次迭代中,将跳过一个元素,并且在最后不会搜索所有元素。最好将过滤后的元素写入新的数组中,问题是在这种数组中如何执行?