【问题标题】:JavaScript arrays and understanding arr[arr.length]JavaScript 数组和理解 arr[arr.length]
【发布时间】:2021-10-19 21:09:20
【问题描述】:

arr[arr.length] 是什么意思。我的意思是它的真正含义或它的真正作用,我无法理解它是如何工作的逻辑。谁能解释一下?

【问题讨论】:

标签: javascript arrays


【解决方案1】:

arr.length是数组的长度。

arr[arr.length] 正在通过索引访问数组长度(超出范围,因为长度从 1 开始,而不是索引 0)。

示例:

const test = [1,2,3]
test[test.length]
undefined
test[test.length-1]
3

【讨论】:

  • 这个答案没有描述arr[arr.length]的优点。为什么有人会使用arr[arr.length]
  • 我确实认为没有充分的理由在 JavaScript 中使用它,但如果有的话,我很高兴听到一些。
  • 我更喜欢() => numbers[numbers.length] = Math.random() 而不是() => numbers[numbers.push(Math.random()) - 1],但显然这只是一种意见。我认为没有充分的理由强制 push 并使用返回的长度来访问数组,而不是直接使用该值。对我来说,这看起来像是编写糟糕的代码来强制“好习惯”
  • 我认为它正在访问越界索引这一事实就足够了,但我也发现推送更具可读性,因为它始终且仅意味着向数组添加新项目,而重新分配index 通常是更新而不是插入操作。不过,我们完全偏离了原始问题的主题。 :) 此外,如果您对效率感到好奇,这与原始问题有关,尽管差异微不足道:stackoverflow.com/questions/16952605/…
【解决方案2】:

它只是请求数组的特定索引,用例:向数组添加新元素的方式不是很优雅,例如:

arr[arr.length] = newVal
arr.push(newVal)
arr = [...arr, newVal]

【讨论】:

  • 这个答案没有描述arr[arr.length]的优点。为什么有人会使用arr[arr.length]
  • @jabaa 为什么你认为有任何优势?我的意思是-按索引访问数组有什么特别之处?从中得到更多的东西,比如单行黑客只是使代码库不可持续的反模式。
  • 优雅是一种观点。对我来说,() => numbers[numbers.length] = Math.random() 这样的东西比 () => { numbers.push(Math.random); return numbes[numbers.length - 1]; } 优雅得多
  • @jabaa 但无论如何您都需要在某处存储数字,对吧?因此,即使这段代码看起来仍然非常丑陋,但它的作用更清楚:() => array.push(Math.random()) && array.at(-1),但无论如何,正如我所说,如果你打算在任何更大的项目中使用它,那么再说一遍:这段代码是不可持续的跨度>
  • arr.push(newVal)arr[arr.length] = newVal 更可持续,因为究竟为什么呢?优雅是一种观点。 arr.push(newVal) 有什么优势?
【解决方案3】:

arr.length 表示从索引0arr.length - 1 的数组长度。

例如,如果您有arr = ["a", "b", "c"],则arr.length3

arr[0]"a"arr[1]"b"arr[2]"c"

arr[3] 不存在,。但是如果你做arr[arr.length] = "d",你会得到["a", "b", "c", "d"]

这是一种奇怪的结构,通常应该简单地写成arr.push("d")

const arr = ["a", "b", "c"];
console.log(arr.length, arr[0], arr[1], arr[2], arr[3]);
arr[arr.length] = "d";
console.log(arr);
arr.push("e");
console.log(arr);

【讨论】:

  • 这个答案没有描述arr[arr.length]的优点。为什么有人会使用arr[arr.length]
  • 没有优势。这是旧代码/旧习惯
  • 当然有优势。 arr[arr.length] = b 返回b。您可以在一个语句中写() => arr[arr.length] = b,例如对于内存() => numbers[numbers.length] = Math.random()的随机生成器
  • 那么,如果你有答案,为什么要在 cmets 中询问而不建议编辑答案?
  • 人们应该考虑他们的答案并投入一些时间。我没有时间。
【解决方案4】:

此语句获取数组最后一个索引的索引加一。它用于将项目附加到数组。相当于array.push()

var fruits = ["apple", "orange", "banana", "pear"];
// appends grapes to the array
fruits[fruits.length] = "grapes";
console.log(fruits);

如需进一步阅读,请查看W3School's page on array methods

【讨论】:

  • array.push() 将值附加到数组。
  • 这个答案没有描述arr[arr.length]的优点。为什么有人会使用arr[arr.length]
  • 首选链接到 MDN Array, Array#push()
  • 为简单起见,我在回答中使用了 W3Schools。
  • arr[arr.length] = b 返回b。您可以在一个语句中写() => arr[arr.length] = b,例如对于内存() => numbers[numbers.length] = Math.random() 的随机生成器
猜你喜欢
  • 2022-01-23
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
相关资源
最近更新 更多