我坚持使用javascript forEach func。 这是一段代码:
const PPPP =
{
'azerty': 0,
'qwerty': []
};
$(document).ready(function () {
var k = [];
var z = [0, 1, 2, 3];
var m = ['a', 'b', 'c'];
z.forEach(function(v) {
var p = Object.assign({}, PPPP);
$('#debug').append(v.toString()+', ');
p.azerty = v;
m.forEach(function(v) {
p.qwerty.push(v);
});
k.push(p);
});
$('#res').html('Final: '+JSON.stringify(k));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="debug"></div>
<div id="res"></div>
预期: 决赛:0,1,2,3, 决赛:[{“azerty”:0,“qwerty”:[“a”,“b”,“c”]},{“azerty”:1,“qwerty”:[“a”,“b”,“ C “]},{” AZERTY “:2,” QWERTY “:[” 一”, “b”, “C”]},{ “AZERTY”:3, “QWERTY”:[ “一”, “b” 的, “C”]}]
有人可以提出另一种方法来解决这个问题吗? 谢谢!
编辑#1:通过手动复制分配修复。但是因为未知原因而无法在forEach中使用。
答案 0 :(得分:0)
您正在循环中引用相同的对象。您可以在回调中移动对象,并为每个循环使用新对象。
$(document).ready(function () {
var k = [];
var z = [0, 1, 2, 3];
z.forEach(function(v) {
const PPPP = { 'azerty': 0 }; // move to this place
var p = PPPP;
$('#debug').append(v.toString()+', ');
p.azerty = v;
k.push(p);
});
$('#res').html('Final: '+JSON.stringify(k));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="debug"></div>
<div id="res"></div>
&#13;
答案 1 :(得分:0)
p对象在循环中具有相同的引用。您可以使用Object.assign根据PPPP
const PPPP =
{
'azerty': 0
};
$(document).ready(function () {
var k = [];
var z = [0, 1, 2, 3];
z.forEach(function(v) {
var p = Object.assign({},PPPP);
$('#debug').append(v.toString()+', ');
p.azerty = v;
k.push(p);
});
$('#res').html('Final: '+JSON.stringify(k));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="debug"></div>
<div id="res"></div>
&#13;
答案 2 :(得分:0)
您将var p
定义为空白对象,如下面的::
var p = {};
其余代码应保持不变。就是这样。