Есть ли способ изменить индексацию элементов массива, чтобы она начиналась с 1, 2, 3, 4 вместо 0, 1, 2, 3? - PullRequest
0 голосов
/ 30 сентября 2018

Я не хочу перемещать позиции элементов с помощью push () / slice () / unshift () .etc, потому что даже если я изменил позиции элементов «с помощью одного из этих методов, индексы по-прежнему начинаются с»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 голосов
/ 30 сентября 2018

Если вы абсолютно хотите, создайте 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.Вам также придется переопределить все методы итератора, чтобы учесть тот факт, что конструктор добавляет элемент null с индексом 0.

0 голосов
/ 30 сентября 2018

Все массивы имеют элемент 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])
0 голосов
/ 30 сентября 2018

Все массивы имеют элемент 0 независимо от того, хотите вы этого или нет.Это первый элемент массива.Если вы поместите свой первый элемент в индекс 1, у вас все равно будет пустой элемент в индексе 0, и вам придется пропускать его каждый раз, когда вы обращаетесь к массиву.

Это просто фундаментальная часть всего процессаработают современные языки программирования.Когда вы отображаете номер элемента для пользователя, вы обычно добавляете к нему 1 для удобства чтения.Очевидно, что если вы хотите достичь своей цели здесь, вы можете просто снять пустой элемент в массиве.Но у вас все равно будет пустой элемент в 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...