Javascript 将两个唯一的对象推送到一个空数组会导致一个包含两个等效对象的数组
我有以下资料:Javascript 将两个唯一的对象推送到一个空数组会导致一个包含两个等效对象的数组,javascript,arrays,object,reference,Javascript,Arrays,Object,Reference,我有以下资料: var params = {status: [69,71]}; var getTasks = function(params) { if (params.status.constructor === Array) { var statuses = params.status; var newParams = []; for (var i = 0; i < statuses.length; i++) {
var params = {status: [69,71]};
var getTasks = function(params) {
if (params.status.constructor === Array) {
var statuses = params.status;
var newParams = [];
for (var i = 0; i < statuses.length; i++) {
params.status = statuses[i];
newParams.push(params);
}
console.log(newParams);
}
// else {
// ...
// }
};
for (var i = 0; i < statuses.length; i++) {
params.status = statuses[i];
newParams.push(params);
}
var-params={status:[69,71]};
var getTasks=函数(参数){
if(params.status.constructor==数组){
变量状态=参数状态;
var newParams=[];
对于(变量i=0;i
调用getTasks(params)
将newParams
记录为:
[{status:71},{status:71}]
我希望这会注销
[{status:69},{status:71}]
我在这里遗漏了什么?您两次推送同一对象,对象的最新更改可见
var obj;
for (var i = 0; i < statuses.length; i++) {
// construct obj as desired
obj = {}; // notice this new object is created inside the loop
obj.status = statuses[i];
// push to your array
newParams.push(obj);
}
var-obj;
对于(变量i=0;i
newParams.push(参数)
正在将params
引用的对象推送到数组中。如果数组中充满了对同一对象的引用,那么对该对象的任何修改都将出现在每个数组元素中,因为它们都是同一个对象。每次创建一个新对象,而不是重复使用相同的对象:
for (var i = 0; i < statuses.length; i++) {
newParams.push( { status: statuses[i] } );
}
for(变量i=0;i
参数
是单个对象。在for
循环中,执行以下操作:
var params = {status: [69,71]};
var getTasks = function(params) {
if (params.status.constructor === Array) {
var statuses = params.status;
var newParams = [];
for (var i = 0; i < statuses.length; i++) {
params.status = statuses[i];
newParams.push(params);
}
console.log(newParams);
}
// else {
// ...
// }
};
for (var i = 0; i < statuses.length; i++) {
params.status = statuses[i];
newParams.push(params);
}
@PaulPro和@PaulS给出了正确的答案,但总有机会学习新东西。在这种情况下,我建议您看看哪些可以大大简化您的代码:
function statutify(value) {
return { status: value };
}
var getTasks = function(params) {
if (params.status.constructor === Array) {
var newParams = params.status.map(statutify);
console.log(newParams);
}
// ...
};
或者,了解@voithos建议的其他库也无妨。在循环中,您正在使用
params.status=status[i]更改全局params
对象
然后继续推送
ing相同的参数
对象。对象被视为引用,这意味着当您对对象进行更改时,它们将传播到引用对象的任何地方。这就是为什么它们得到相同的值,它们是相同的对象。不过,基于代码,您实际上希望实现什么还不清楚。