为什么我会从vue.js组件脚本中的简单for循环中收到“我未定义”错误?

时间:2019-06-19 19:00:01

标签: javascript 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问题

2 个答案:

答案 0 :(得分:1)

在for循环中使用它之前,请尝试添加let i。 参见下面的示例。

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

答案 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.log(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'}
  ]
}