在JavaScript中,如何使用for循环迭代器编号使对象属性键唯一?

在JavaScript中,如何使用for循环迭代器编号使对象属性键唯一?,javascript,for-loop,javascript-objects,Javascript,For Loop,Javascript Objects,我有一个对象,我需要用唯一的属性名和数据填充它,并在for循环中动态地构建它。我想使用for循环迭代器编号来附加到属性名称上(只是为了使其唯一),但由于我已经在向父属性添加变量,我对实现这一点的语法感到困惑 这概括了我想要实现的结果对象结构。需要添加迭代器号的属性有slotContent0、slotContent1等 slotObj slot1 slotContent0 templateNo: '1', ass

我有一个对象,我需要用唯一的属性名和数据填充它,并在for循环中动态地构建它。我想使用for循环迭代器编号来附加到属性名称上(只是为了使其唯一),但由于我已经在向父属性添加变量,我对实现这一点的语法感到困惑

这概括了我想要实现的结果对象结构。需要添加迭代器号的属性有slotContent0、slotContent1等

slotObj
    slot1
          slotContent0 
              templateNo: '1',
              assetId: 'asset-123'
          slotContent1
              templateNo: '4',
              assetId: 'asset-234'
    slot2
          slotContent0
              templateNo: '1',
              assetId: 'asset-456'
          slotContent1
              templateNo: '4',
              assetId: 'asset-678'
          slotContent2
              templateNo: '4',
              assetId: 'asset-879'
    slot3
    etc...
这是到目前为止我的代码

var slotObj = {};
var slotId = 'slot1' // hardcoded for SO but this is populated via a parent for loop so would be dynamic ie. slot1, slot2, slot3 etc

for (var i = 0; i < assetList.length; i++) {

    var assetItem = assetList[i];

    slotObj[slotId] = {
        'slotContent': { // <-- how to make this unique using iterator ie. slotContent0, slotContent1 etc...
            'templateNo': assetItem.dataset.template,
            'assetId': assetItem.dataset.contentId
        }
    }
}
var slotObj={};
var slotId='slot1'//SO的硬编码,但这是通过父for循环填充的,因此是动态的,即slot1、slot2、slot3等
对于(变量i=0;i'slotContent':{/您可以使用方括号表示法生成密钥:

    slotObj[slotId] = {
        ['slotContent' + i]: { // <-- made unique using iterator ;)
            'templateNo': assetItem.dataset.template,
            'assetId': assetItem.dataset.contentId
        }
    }
slotObj[slotId]={

['slotContent'+i]:{/我认为,使用JSON语法无法实现这一点。但是,您可以逐个分配属性:

for (var i = 0; i < assetList.length; i++) {
  var assetItem = assetList[i];

  slotObj[slotId] = {};
  slotObj[slotId]['slotContent' + i] = {
    'templateNo': assetItem.dataset.template,
    'assetId': assetItem.dataset.contentId
  };
}
for(变量i=0;i
您可以使用

slotObj[slotId]={
`slotContent${i}`:{/
让slotObj={};
让slotId='slot1'//对SO进行硬编码,但这是通过父for循环填充的,因此将是slot2、slot3等
slotObj[slotId]={};
for(设i=0;i{//在ES6中也称为“计算属性名”:
slotObj[slotId]={};
肯定需要在loop@noviewpoint不,这与计算属性名无关,它们是用于对象文字的。也许你是想对Mattias的答案发表评论?是的,你是对的,我对错误的答案发表了评论:)你真的应该使用数组来代替。可能是重复的。我可以问一下你为什么想要要实现这一点,使用数组会得到相同的结果,毕竟,您的属性看起来像是承载着相同类型的对象……这是个坏主意。使用数组。@Damodog我的意思是
const slotObj=[{templateNo:'1',assetId:'asset-123'},{templateNo:'4',assetId:'asset-234'}],…];
谢谢@alexey zelenin这正是我要找的!:-)上面的工作非常完美!