有什么方法可以更改数组元素的索引,因此它从1、2、3、4而不是0、1、2、3开始吗?

时间:2018-09-30 07:02:52

标签: javascript html arrays indexing

我不想通过使用push()/ slice()/ unshift()等来移动元素位置,因为即使我使用其中一种方法更改了元素位置,索引仍然从' 0”,而不是“ 1”。

我的目标是“操纵元素 index ”,因此当我回调它们时,它会从1、2、3、4开始。 。

此代码基本上可以正常工作。我想操纵数组元素索引:|

  $(function submenuTrigger(){
    var list = [
      ["", 'Urus', 'Aventador', 'Experiences', 'Few Off', 'Concept', 'Ad Personam', " "], // 0, 1, 2, 3, 4, 5 6 . .
      ["", 'People', 'History', 'Masterpieces', 'Design', 'Innovation & Exellences', " ", " ", " "],
      ["", "Locators", "Accessori Origianli", "Spare Parts", "Services", "Polo Storico", "Financial Services", " ", " "],
      ["", "News", "Events", "Museum", "Accademia", "Esperienza", "Lamborghini Lounge", "Mobile App", "  "],
      ["", "News", "Events", "Museum", "Accademia", "Esperienza", "Lamborghini Lounge", "Mobile App", "  "]
    ]
    var int_compare = 0;
    $('#home-menu-nav ul li').mouseenter(function(){
      var li_int = $(this).index() + 1; // make sure li indexes start 1, 2, 3, 4 . .
          list_int = list[li_int];      // make sure list's first elements start counting 1, 2, 3, 4 . .
          list_len = list_int.length;   // makes automatically count inside of for statement / loop_int = [list]
          int_compare = li_int;
          console.log(list_int)
          if(li_int == int_compare){
            for(p = 0; p < list_len; p++){
              console.log(list_len)
              $('#submenu-content-row-left ul li:nth-child('+ p +')').html(list[li_int - 1][p]);
              nbsp = list[li_int - 1][p]
            }
          } else {
            console.log('none');
            return
          }
    })
  })
 
<div id="home-menu-nav">
  <ul>
    <li>MODELS</li>
    <li>BRAND</li>
    <li>OWNDERSHIP</li>
    <li>EXPERIENCE</li>
    <li>MOTORSPORT</li>
    <li>STORE</li>
  </ul>
</div>
 <div id="submenu-content-row-left">
  <ul>
    <li>&nbsp;</li>
    <li>&nbsp;</li>
    <li>&nbsp;</li>
    <li>&nbsp;</li>
    <li>&nbsp;</li>
    <li>&nbsp;</li>
    <li>&nbsp;</li>
  </ul>
 </div>

如果可以的话,我想更改元素的索引

3 个答案:

答案 0 :(得分:2)

所有数组都具有0元素,无论您是否想要它们。那是数组的第一个元素。如果将第一个元素放在索引1处,则索引0处仍将有一个空元素,并且每次访问数组时都必须跳过该元素。

这只是所有现代编程语言工作方式的基本部分。当向用户显示元素编号时,通常出于可读性的目的向其添加1。显然,如果您想在这里实现目标,则可以将一个空元素移入数组。但是您仍然会在0处有一个空元素。

答案 1 :(得分:1)

如果绝对需要,请创建一个CustomArray来继承Array的原型方法:

window.CustomArray = (function() {
  function CustomArray() {
    var customArray = Object.create(Array.prototype);
    customArray = (Array.apply(customArray, [null, ...arguments]) || customArray);
    Object.defineProperty(customArray, 'len', { 
      get: function(){ return this.length - 1 },
    });
    return (customArray);
  }
  return (CustomArray);
}).call({});

var a = new CustomArray('Urus', 'Aventador', 'Experiences', 'Few Off', 'Concept', 'Ad Personam');

console.log(a[1]);
console.log(a.len);

请注意,您可以根据需要覆盖CustomArray上的原型方法,但是无法覆盖length之类的继承属性,因此我添加了len属性来返回length-1 。您还必须重写所有迭代器方法,以考虑到构造函数在索引0处添加了null元素的事实。

答案 2 :(得分:1)

  

无论您是否想要,所有数组都有一个0元素。

您不能使数组以1开头。有三种方法可以使数组看起来像这样:

选项1:将0设置为空

var myArray = {
  null,
  "item1",
  "item2"
};
document.write(myArray[1]);

选项2:使用unshift()函数

var myArray = {
  "item1",
  "item2"
};
myArray.unshift();
document.write("myArray")

选项3:如果要在页面上显示结果,请减去1

var myArray = {
  "item1",
  "item2"
};
var itemToAccess = 1;
itemToAccess += -1;
document.write(myArray[itemToAccess])