javascript foreach var weird ptr

时间:2017-02-13 13:22:18

标签: javascript jquery foreach scope

我坚持使用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中使用。

3 个答案:

答案 0 :(得分:0)

您正在循环中引用相同的对象。您可以在回调中移动对象,并为每个循环使用新对象。

&#13;
&#13;
$(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;
&#13;
&#13;

答案 1 :(得分:0)

p对象在循环中具有相同的引用。您可以使用Object.assign根据PPPP

创建新对象

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:0)

您将var p定义为空白对象,如下面的::

var p = {};

其余代码应保持不变。就是这样。

相关问题