分配嵌套地图唯一键,javascript

Assign Nested map unique key, javascrpit

我需要为每个输入分配自己的 ID。

const sep = words.map((word, ind) => {
  return (
     <div key={ind} className="guess__word">
       {word.split("").map((letter, id) => {
         if (letter === " ") {
           return <SpaceBox key={id} letter={letter} />;
         } else {
           return <LetterBox key={id} id={id} letter={letter} />;
         }
      })}
     </div>
   );
 });

我遇到的问题是,由于地图是嵌套的,id 的值不断重置为 0。每个单词的长度都不同,所以很难弄清楚是否有数学运算可以帮助我解决这个问题的方程式。

供参考,每个单词的长度分别为10、3、4、4。

我还需要 ID 等于单词的长度。所以我需要 id 为 0-20。

if kinda hard to figure out if there is a math equation that would help me solve this.

有 - 给定指标 X 和 Y,您可以映射到第 X 个素数的 Y 次方 - 但这里太过分了。只需使用字符串连接,对于键,例如索引 3 和 4 可以产生 3_4.

的键

我建议 not using .split('') 从字符串中获取字符数组 - 改为调用数组的迭代器,否则当出现奇数字符时你偶尔会 运行 遇到问题。

const sep = words.map((word, ind) => {
  return (
     <div key={ind} className="guess__word">
       {[...word].map((letter, id) => {
         const key = `${ind}_${id}`;
         if (letter === " ") {
           return <SpaceBox key={key} letter={letter} />;
         } else {
           return <LetterBox key={key} id={id} letter={letter} />;
         }
      })}
     </div>
   );
 });

如果单词可能会发生变化,您可能需要使用稍微不同的键来区分 SpaceBox 字母和 LetterBox 字母。

<LetterBox key={key + ' '} id={id} letter={letter} />

如果你必须只使用数组索引从 0 开始,它会更难看 - 在外面声明最后使用的数字,并在循环内使用和递增它。

let lastId = -1;
const sep = words.map((word) => {
  return (
     <div key={ind} className="guess__word">
       {[...word].map((letter) => {
         if (letter === " ") {
           return <SpaceBox key={++lastId} letter={letter} />;
         } else {
           return <LetterBox key={++lastId} id={lastId} letter={letter} />;
         }
      })}
     </div>
   );
 });

由于奇数键的要求,以上只是静态词的一个好方法。如果他们可能会改变, 基于 words

为了节省数学,您不妨以有意义的方式连接数字

const sep = words.map((word, ind) => {
  return (
     <div key={ind} className="guess__word">
       {word.split("").map((letter, id) => {
         const key = `${ind}-{key}`;
         if (letter === " ") {
           return <SpaceBox key={key} letter={letter} />;
         } else {
           return <LetterBox key={key} id={id} letter={letter} />;
         }
      })}
     </div>
   );
 });