Javascript Array.push()和console.log()提供了不同的变量

Javascript Array.push()和console.log()提供了不同的变量,javascript,arrays,Javascript,Arrays,我想修改这个 var array = [{"host": ["example.com", "www.example.com"], "from": "test1", "to": "test2"}, {"host": ["example.net", "www.example.net"], "from": "test3", "to": "test4"}]; 在Chrome 43.0.2357.134 m上插入此 [{"host": "example.com", "from": "test1", "

我想修改这个

var array = [{"host": ["example.com", "www.example.com"], "from": "test1", "to": "test2"},
 {"host": ["example.net", "www.example.net"], "from": "test3", "to": "test4"}];
在Chrome 43.0.2357.134 m上插入此

[{"host": "example.com", "from": "test1", "to": "test2"},
 {"host": "www.example.com", "from": "test1", "to": "test2"},
 {"host": "example.net", "from": "test3", "to": "test4"},
 {"host": "www.example.net", "from": "test3", "to": "test4"}];
我使用了密码

array.forEach(function(rule){
     rule.host.forEach(function(host){
         var tmp = rule;
         tmp.host = host;
         result.push(tmp);
     });
 });
但它给

[{"host": "www.example.com", "from": "test1", "to": "test2"},
 {"host": "www.example.com", "from": "test1", "to": "test2"},
 {"host": "www.example.net", "from": "test3", "to": "test4"},
 {"host": "www.example.net", "from": "test3", "to": "test4"}];

当我用
console.log()替换
array.push
时,它会记录正确的变量。它不能与
array.push()
异步,因为我尝试了旧的
array.length
方法来添加到数组-没有更改。可能是我使用的
foreach
错误-有很多
数组。原型
方法-我找不到正确的方法。

Javascript中的数组和对象是通过引用传递和分配的,而不是通过值
var tmp=rule
只是将第二个指针指向原始规则,然后覆盖数据并打印每个条目两次。要达到预期效果,必须将条目中的所有数据克隆到新条目中

array.forEach(function(rule){
    rule.host.forEach(function(host){
        result.push({
            host: host,
            from: rule.from,
            to: rule.to
        });
    });
});

Javascript中的数组和对象是通过引用传递和分配的,而不是通过值
var tmp=rule
只是将第二个指针指向原始规则,然后覆盖数据并打印每个条目两次。要达到预期效果,必须将条目中的所有数据克隆到新条目中

array.forEach(function(rule){
    rule.host.forEach(function(host){
        result.push({
            host: host,
            from: rule.from,
            to: rule.to
        });
    });
});