Dojo lang.mixin for循环只将最后一项写入对象

时间:2016-09-20 01:07:20

标签: dojo

我正在使用dojo lang.mixin将项目写入对象,但似乎只写了最后一个键:对象的值。这让我觉得lang.mixin只写了一个键:一次是值。有没有办法继续将key:值附加到对象?

for (var i = 0; i < selection.length; ++i) {
   lang.mixin(myObj, {
     selection[i].Type: selection[i].Name //always gives me last index in loop
   })
}

1 个答案:

答案 0 :(得分:0)

向对象添加属性时,属性必须是唯一的。

lang.mixin用于使用源对象更新目标对象。如果属性“name”与源匹配,则更新属性,否则将属性添加到目标。嵌套对象不会混合。例如:

var a = { 
    name:"John",
    account : { type : "student", email : "a@xyz.com" }
};
var b = { 
    Age: "18 yrs",
    account: { phone : "66589956" }
};
lang.mixin(a, b); // here the type and email will be lost for account property

在您的情况下,如果您认为selection[i].Type是“类型”,那么您的代码将表现如下

for (var i = 0; i < selection.length; ++i) {
    lang.mixin(myObj, {
        "type" : selection[i].Name
    });
}

因此,除非selection[i].Type值不同,否则将在循环的每个循环中更新相同的属性。

require(["dojo/_base/lang"], function(lang){
  var selection = [ { Type:"A", Name:"Letter A" },
                    { Type:"B", Name:"Letter B" },
                    { Type:"C", Name:"Letter C" },
                    { Type:"D", Name:"Letter D" }
                   ];
  
  var myObj = {};
  for (var i = 0; i < selection.length; ++i) {
     var tmp = {};
     tmp[selection[i].Type] = selection[i].Name;
     lang.mixin(myObj, tmp);
  }
  console.log(myObj);
});
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.11.2/dojo/dojo.js"></script>