问题描述
我想修改这个
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
方法添加到array的方法-无需更改。
可能是我错误地使用了foreach
- Array.prototype
方法很多-我找不到正确的方法。
1楼
Javascript中的数组和对象是按引用而不是按值传递和分配的。
var tmp = rule
只是指向原始规则的第二个指针,那么您将覆盖数据并打印两次每个条目。
为了达到预期的效果,您必须将条目中的所有数据克隆到新条目中。
array.forEach(function(rule){
rule.host.forEach(function(host){
result.push({
host: host,
from: rule.from,
to: rule.to
});
});
});