作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我似乎从来没有完全理解 JavaScript。请向我解释一下。
我有一个名为 arr1 的对象数组。在这个简化的例子中,它只有两个成员;名称和一些值。该数组按名称排序,内容如下所示:
Harry 1
Joe 2
Joe 3
Peter 4
我想创建另一个名为 arr2 的数组。它应该包含来自 arr1 的唯一名称。如果找到重复项,则会为该名称添加 someValue。我基本上想要这个作为 arr2 中的内容:
Harry 1
Joe 5 <-- the two values from Joe in arr1 sums up to 5
Peter 4
所以我想出了下面的脚本。生成的 arr2 正是我想要的。但是,arr1 也已更新,这不是我想要的。
为什么会发生这种情况,我该如何解决?
var arr1 = [];
var arr2 = [];
arr1.push({name: 'Harry', someValue: 1});
arr1.push({name: 'Joe', someValue: 2});
arr1.push({name: 'Joe', someValue: 3});
arr1.push({name: 'Peter', someValue: 4});
let previousName = '';
for (var i=0;i<arr1.length;i++) {
if (arr1[i].name == previousName) {
arr2[arr2.length-1].someValue += arr1[i].someValue;
} else {
arr2.push(arr1[i]);
previousName = arr1[i].name;
}
}
/* Result arr1 is not ok:
0: Object { name: "Harry", someValue: 1 }
1: Object { name: "Joe", someValue: 5 } <-- I want the value 2 to be preserved
2: Object { name: "Joe", someValue: 3 }
3: Object { name: "Peter", someValue: 4 }
Result arr2 is ok:
0: Object { name: "Harry", someValue: 1 }
1: Object { name: "Joe", someValue: 5 }
2: Object { name: "Peter", someValue: 4 }
*/
最佳答案
这是因为您将 对象实例 从 arr1
推送到 arr2
,而不是副本。
相反,只需在推送到 arr2
时创建对象的新实例,您就可以解决问题。
替换这一行(将实例从arr1
推送到arr2
):
arr2.push(arr1[i]);
使用这一行(创建一个新的实例并将其推送到arr2
:
arr2.push({name: arr1[i].name, someValue: arr1[i].someValue});
这是一个显示此内容的工作片段:
var arr1 = [];
var arr2 = [];
arr1.push({name: 'Harry', someValue: 1});
arr1.push({name: 'Joe', someValue: 2});
arr1.push({name: 'Joe', someValue: 3});
arr1.push({name: 'Peter', someValue: 4});
;
let previousName = '';
for (var i = 0; i < arr1.length; i++) {
if (arr1[i].name == previousName) {
arr2[arr2.length - 1].someValue += arr1[i].someValue;
} else {
arr2.push({name: arr1[i].name, someValue: arr1[i].someValue});
previousName = arr1[i].name;
}
}
console.log(arr1);
console.log(arr2);
关于javascript - 如何在不破坏原始数组的情况下创建新的 JavaScript 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59424567/
我是一名优秀的程序员,十分优秀!