gpt4 book ai didi

javascript - 在 Javascript 中,如何告诉 array.filter() 在新数组中复制元素对象?

转载 作者:行者123 更新时间:2023-11-30 13:51:55 26 4
gpt4 key购买 nike

如此简化的代码。

var a = [
{ name: "first", num: 1 },
{ name: "first", num: 2 },
{ name: "first", num: 3 },
{ name: "first", num: 4 },
{ name: "first", num: 5 },
{ name: "first", num: 6 },
{ name: "first", num: 7 },
{ name: "first", num: 8 },
{ name: "first", num: 9 }
];

var b = a.filter(function(el) {
return el.num % 2 == 0;
});

console.log("a1", a); // [1, 20, 3, 40, 5, 60, 7, 80, 9]
console.log("b1", b); // [20, 40, 60, 80]

for (let i = 0; i < b.length; i++) {
b[i].num = b[i].num * 10;
}

console.log("a2", a); // [1, 20, 3, 40, 5, 60, 7, 80, 9]
console.log("b2", b); // [20, 40, 60, 80]

我的新理解是数组元素包含对对象的引用,而不是对象。有哪些方法可以复制这些对象?

  1. 过滤,然后从过滤后的数组中构建新对象并将新事物放入新数组中?
  2. 使用一些我目前不熟悉的方法?
  3. 重新设计代码以停止使用数组中的对象?

此外,console.log() 显示变量在 for 循环之前发生变化是怎么回事?

最佳答案

如果你想复制数组中的对象,你应该使用map函数。

var b = a.filter(val => val.num %2 === 0).map(val => Object.assign({}, val, { num: val.num * 10}));

map 函数将返回一个新数组,其中包含从函数返回的值。在此示例中,我们正在创建一个新对象 Object.assign({}) 并在更改 num 字段时复制现有对象。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

关于javascript - 在 Javascript 中,如何告诉 array.filter() 在新数组中复制元素对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com