【问题标题】:Looping Array which is inside an object [duplicate]对象内部的循环数组[重复]
【发布时间】:2017-03-22 03:53:01
【问题描述】:

我有一个名为 myInfo 的对象

var myInfo = {
            skills: ['PHP', 'Java', 'JavaScript', 'HTML', 'CSS', 'jQuery'],
            languages: ['English', 'German']
            }

我想遍历skills 数组内的字符串,该数组位于myInfo 对象内。这个我试过了,好像不行

        var mySkills = '';
        for (i=0, i < myInfo.skills.length, i++) {
          mySkills += 'li' + myInfo.skills + 'li';
        }
        document.write(mySkills);

任何帮助将不胜感激。也许我在代码的某个地方出错了。

【问题讨论】:

  • 三个错误。首先在选项之间使用;,而不是,。其次,你没有使用 i,所以myInfo.skills 应该是myInfo.skills[i]。第三,如果你想使用字符串创建新的li `' + myInfo.skills + ''
  • var mySkills = myInfo.skills.map(skill =&gt; 'li' + skill + 'li') 将产生:["liPHPli","liJavali"...]。 由于这被标记为重复,我无法发布答案。另外,请注意“Arrow Functions”,(skill) =&gt; 'li' + skill + 'li' 部分(function(skill){ return 'li'+skill+'li' } 的缩写)不能在 IE 中工作(当然),但可以在 Edge 中工作,因为它的价值。跨度>

标签: javascript arrays loops javascript-objects


【解决方案1】:

我会编写一个创建li 的例程:

function li(content) {
  const elt = document.createElement('li');
  elt.innerHTML = content;
  return elt;
}

现在,基于数组创建一个文档片段,将所有lis 放入:

function makeLis(contents) {
  const frag = document.createDocumentFragment();

  contents.forEach(content => frag.appendChild(li(content));
  return frag;
}

编写一个函数来创建一个ul 元素以将li 放入:

function makeUl(contents) {
  const ul = document.createElement('ul');

  ul.appendChild(makeLis(contents));
  return ul;
}

现在您可以将其写入文档:

document.getElementById('target').appendChild(makeUl(contents));

【讨论】:

    【解决方案2】:

    通过索引获取技能值

    var mySkills = '';
    for(i=0; i < myInfo.skills.length; i++) {
        mySkills += '<li>' + myInfo.skills[i] + '</li>';
    }
    document.write(mySkills);
    

    【讨论】:

    • 这似乎是我在代码中遇到的少数错误之一。当我尝试将其记录到控制台时仍然输出错误。
    • 错误是什么?
    • @Chinito 在for(i=0, i &lt; myInfo.skills.length, i++) { 中使用; 而不是,
    • 哦。是的。也许那是你的错误。使用分号代替逗号。我只是复制了你的代码。谢谢@Tushar
    • 是的,这是错误,现在可以使用。谢谢!
    【解决方案3】:

    您可以通过索引 [] 访问对象数组中的单个对象。 对象基于 0 索引。

    skills: ['PHP', 'Java', 'JavaScript', 'HTML', 'CSS', 'jQuery'],
    

    PHP 是对象数组的开始,位置 0

    mySkills += '<li>' + myInfo.skills[i] + '</li>';
    

    i 每次通过都会递增,直到,

    for(i=0; i < myInfo.skills.length, i++) {
    

    i 大于数组的length,0,1,2,3,4,5。

    初始化变量时需要分号。

    【讨论】:

    【解决方案4】:

    除非你也需要访问索引,否则你可以使用for.. of

    var myInfo = {
                skills: ['PHP', 'Java', 'JavaScript', 'HTML', 'CSS', 'jQuery'],
                languages: ['English', 'German']
                }
                
    for (let skill of myInfo.skills)
    {
      console.log(skill);
    }

    如果您确实需要访问索引并且不想写很长的i=0; i &lt; length; i++,您可以改用for... in

    var myInfo = {
                skills: ['PHP', 'Java', 'JavaScript', 'HTML', 'CSS', 'jQuery'],
                languages: ['English', 'German']
                }
                
    for (let index in myInfo.skills)
    {
      console.log(myInfo.skills[index], "at index", index);
    }

    【讨论】:

    • OP 似乎正在尝试连接 html 字符串。
    • @guest271314 没错,但也有问题
    • 最简单的方法!我用 let of 循环工作得很好。但是你知道为什么它输出这么点吗? prntscr.com/emy0uh for (让 myInfo.skills 的技能) { document.write('
    • ' + Skill + '
    • '); }
  • @KautilyaKondragunta 因为它是一个 li。除非您对它们应用 css,否则它将默认为点,请参阅:stackoverflow.com/questions/1027354/… 另外,如果您不想要点,为什么要使用 li
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签