我想修改此
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"}];
当我用array.push
替换console.log()
时,它会记录正确的变量。它不能是array.push()
的异步问题,因为我尝试使用旧array.length
方式添加到数组 - 没有更改。可能是我使用foreach
错误 - 有很多Array.prototype
方法 - 我无法正确使用。
答案 0 :(得分:5)
Javascript中的数组和对象通过引用传递和分配,而不是通过值传递。 var tmp = rule
只是指向原始规则的第二个指针,然后您将覆盖数据并打印每个条目两次。要达到预期效果,必须将条目中所有的数据克隆到新条目中。
array.forEach(function(rule){
rule.host.forEach(function(host){
result.push({
host: host,
from: rule.from,
to: rule.to
});
});
});