Vanilla Js 中的数组深度合并未按预期工作
Deep Merge of Arrays in Vanilla Js not working as expected
我做了一个代码笔来演示我的问题:
https://codepen.io/milenoi-the-sans/pen/vYmzyOj
我有一个包含多个数组的对象。
我想通过单击按钮更改数组中的某些值。
我的问题:代码按预期工作
$series = $.extend(true, [], arr[2]);
但不是在 Vanilla JS 中使用
$series = [...[], ...arr[2]];
我想通过将它乘以一个数字来更改 onclick 的值。
我做错了什么?
谢谢!
let arr = {
2: [{
label: "Label 1",
data: [
[1627776000000, 100]
]
}]
}
let series = null;
let update = function(count) {
//$series = [...[], ...arr[2]];
//$series = $.extend(true, [], arr[2]);
$series = [...arr[2]];
$series.forEach(($el, index) => {
let $value = 0;
$series[index].data.forEach(($ele, subIndex) => {
$value = $series[index].data[subIndex][1];
$value = count * $value;
$series[index].data[subIndex][1] = $value;
});
document.querySelector('.text').textContent = $value;
});
};
document.querySelectorAll('button').forEach(($button) => {
$button.addEventListener('click', function(e) {
e.preventDefault();
update(this.getAttribute('data-count'));
}, false);
});
.text {
background: cornflowerblue;
padding: 30px;
color: white;
margin: 10px;
}
button {
margin: 10px;
}
<button data-count="2">Factor 2</button>
<button data-count="3">Factor 3</button>
<button data-count="4">Factor 4</button>
<button data-count="5">Factor 5</button>
<div class="text"></div>
预期输出
点击按钮应将 100 乘以日期计数值 (2,3,4...),所以我预计
200
300
400
在第一次点击时有效。但随后它会乘以给定值。
当我更换
$series = $.extend(true, [], arr[2]);
它按预期工作。
您更改引用数组变量。对于复制而不是引用变量,您可以
使用
$series = JSON.parse(JSON.stringify(arr[2]))
我做了一个代码笔来演示我的问题: https://codepen.io/milenoi-the-sans/pen/vYmzyOj
我有一个包含多个数组的对象。
我想通过单击按钮更改数组中的某些值。
我的问题:代码按预期工作
$series = $.extend(true, [], arr[2]);
但不是在 Vanilla JS 中使用
$series = [...[], ...arr[2]];
我想通过将它乘以一个数字来更改 onclick 的值。
我做错了什么?
谢谢!
let arr = {
2: [{
label: "Label 1",
data: [
[1627776000000, 100]
]
}]
}
let series = null;
let update = function(count) {
//$series = [...[], ...arr[2]];
//$series = $.extend(true, [], arr[2]);
$series = [...arr[2]];
$series.forEach(($el, index) => {
let $value = 0;
$series[index].data.forEach(($ele, subIndex) => {
$value = $series[index].data[subIndex][1];
$value = count * $value;
$series[index].data[subIndex][1] = $value;
});
document.querySelector('.text').textContent = $value;
});
};
document.querySelectorAll('button').forEach(($button) => {
$button.addEventListener('click', function(e) {
e.preventDefault();
update(this.getAttribute('data-count'));
}, false);
});
.text {
background: cornflowerblue;
padding: 30px;
color: white;
margin: 10px;
}
button {
margin: 10px;
}
<button data-count="2">Factor 2</button>
<button data-count="3">Factor 3</button>
<button data-count="4">Factor 4</button>
<button data-count="5">Factor 5</button>
<div class="text"></div>
预期输出
点击按钮应将 100 乘以日期计数值 (2,3,4...),所以我预计
200 300 400
在第一次点击时有效。但随后它会乘以给定值。
当我更换 $series = $.extend(true, [], arr[2]);
它按预期工作。
您更改引用数组变量。对于复制而不是引用变量,您可以 使用
$series = JSON.parse(JSON.stringify(arr[2]))