Почему я получаю сообщение об ошибке «я не определено» из простого цикла for в скрипте компонента vue.js?

Я пытаюсь взять массив, упорядочить этот массив по версии, а затем переместить все версии, начинающиеся с «ipad», в конец списка.

фрагмент из одного файла компонента vue.js:

  computed: {
    orderedUsers: function () {
      let newArray = sortBy(this.jobs, 'version').reverse()
      for (i in newArray) {
        if (i.version.startsWith('iPad')) {
          newlist.push(newlist.splice(i, 1)[0]);
        }
      }
      return newArray
  },

ошибка:

vue.runtime.esm.js?e832:619 [Vue warn]: Error in render: "ReferenceError: i is not defined"

Не уверен, что это вопрос js или вопрос vue.js

for (i in newArray) { должно быть for (const i in newArray) {.
skirtle 19.06.2019 21:03
for (i in newArray) { должно быть for (const i of newArray) {. for...in для перебора собственных свойств объектов. Для массивов используйте for...of.
connexo 19.06.2019 21:09

следующий вопрос, почему я получаю сообщение об ошибке «новый список не определен» из простого цикла for в скрипте компонента vue.js? определите свои переменные перед использованием

Lawrence Cherone 19.06.2019 21:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
805
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте добавить let i, прежде чем использовать его в цикле for. См. пример ниже.

for (let i in newArray) {
  if (i.version.startsWith('iPad')) {
    newlist.push(newlist.splice(i, 1)[0]);
  }
}

Несколько проблем с исходным кодом.

  1. Пропавший const/let на i
  2. in петля должна быть of. А может и нет. В следующих строках предполагается, что i является и индексом, и записью.
  3. newlist не определено.
  4. Кажется, он пытается изменить массив, перебирая его.

Я думаю, вы ищете что-то более похожее на это.

const newArray = sortBy(getData(), 'version').reverse()
const nonIPads = []
const iPads = []

for (const entry of newArray) {
  if (entry.version.startsWith('iPad')) {
    iPads.push(entry)
  } else {
    nonIPads.push(entry)
  }
}

const all = [...nonIPads, ...iPads]

console.info(all)

function sortBy(array, property) {
  return [...array].sort((a, b) => {
    const valueA = a[property]
    const valueB = b[property]

    if (valueA === valueB) {
      return 0
    }

    return valueA < valueB ? -1 : 1
  })
}

function getData() {
  return [
    {version: 'f'},
    {version: 'a'},
    {version: 'd'},
    {version: 'iPad 3'},
    {version: 'iPad 1'},
    {version: 'iPad 4'},
    {version: 'e'},
    {version: 'c'},
    {version: 'g'},
    {version: 'b'},
    {version: 'iPad 2'}
  ]
}

Другие вопросы по теме