生成具有值 A1、A2、A3、B1、B2、B3 等的数组?

Generate array with values A1, A2, A3, B1, B2, B3... etc?

我正在尝试生成一个对象数组,它输出一个如下所示的数组:

[
    {
      _id: 2,
      label: 'A1'
    },
    {
      _id: 3,
      label: 'A2'
    },
    {
      _id: 4,
      label: 'A3'
    },
    {
      _id: 5,
      label: 'B1'
    },
    {
      _id: 6,
      label: 'B2'
    },
    {
      _id: 7,
      label: 'B3'
    }
  ]

一直到字母“G”...但是,我似乎无法完全理解如何自动生成它。到目前为止,我已经想到了这个,但是在我的输出中它跳过了字母,而且没有正确生成 :) 可以在这方面寻求帮助。

我目前拥有的:

function nextChar(c) {
   return String.fromCharCode(c.charCodeAt(0) + 1);
}

const supersetOptions = computed(() => {
  const maxGroup = 6;
  const maxItems = 12;
  let defaultLetter = 'a';

  return Array.from({ length: maxItems }, (value, index) => {
    const currentLetter = nextChar(defaultLetter)
    defaultLetter = nextChar(currentLetter);
    return {
      label: `${currentLetter}${index + 1}`,
      value: `${currentLetter}${index + 1}`
    };
  });
})

您可以在想要的组大小之后增加字母并检查余数。

const
    nextChar = c => (parseInt(c, 36) + 1).toString(36),
    computed = () => {
        const
           maxPerGroup = 3,
           maxItems = 12;

        let letter = 'a';

        return Array.from({ length: maxItems }, (_, index) => {               
            const value = `${letter}${index % maxPerGroup + 1}`;
            index++;
            if (index % maxPerGroup === 0) letter = nextChar(letter);
            return { index, value };
        });
    }

console.log(computed());
.as-console-wrapper { max-height: 100% !important; top: 0; }

您似乎是从 2 开始 _id,但我认为这是一个错字。如果不是,则只需 i+2 而不是第 8 行的 i+1

您所说的名称与您的代码试图生成的名称之间也有不同的 属性 名称。这符合你所说的你想要的。

function generate(count) {
    const results = []

    for(let i = 0 ; i < count ; i++) {
        const letter = String.fromCharCode(65 + (i / 3))
        const delta = (i % 3) + 1
        results.push({
            _id: i+1,
            label: `${letter}${delta}`
        })
    }

    return results
}

console.log(generate(21))

使用生成器

function* labels(end) {
  for (let i = 0; i <= end; i += 1) {
    yield {
      _id: i + 1,
      label: `${String.fromCharCode(65 + (Math.floor(i / 3) % 26))}${i % 3 + 1}`
    }
  }
}

for (const item of labels(122)) {
  console.log([item._id, item.label])
}