【问题标题】:Is there a mixed data structure between array and JSON?数组和 JSON 之间是否存在混合数据结构?
【发布时间】:2020-03-04 17:44:55
【问题描述】:

一个团队将他们的项目交给了我,我在其中看到了一些奇怪的东西。 他们首先将一个变量声明为一个数组:

private myvariable: Array<any> = []; 

但在代码中,他们将其用作对象,执行以下操作:

myvariable['key'] = { 'prop': 'val' }

这最终被评估为奇怪的东西:

[key: {...}]

有人知道如何解释这种数据结构吗?

【问题讨论】:

  • 我不认为你对此感到“奇怪”。这是一个数组,其元素键为“key”,其中包含哈希。在我看来完全正常。
  • blog.niftysnippets.org/2011/01/myth-of-arrays.html。 Javascript 数组只是对象的子类,它具有魔术长度属性、自定义字符串强制方法以及一些其他附加功能,例如 forEachpush 等。索引运算符 ([x]) 实际上与常规运算符没有变化在任何情况下,对象和数组键的行为都类似于字符串。
  • 还要记住这一点:“JSON 是一种编码。” 这是一种将复杂数据结构表示为字符串的标准方式,可以发送并使用 AJAX 接收。与所有语言一样,PHP 提供了一种方法来编码和解码这些字符串来往数据结构。
  • @MikeRobinson 这是我每天都看不到的东西,所以这对我来说很奇怪。并不是每个人都对 JavaScript 有同样的了解。
  • @GarrettMotzner 感谢您的评论,读得很好。

标签: javascript arrays json typescript


【解决方案1】:

Array 基本上是一个 JavaScript 对象,可以有与之关联的属性和方法,就像一个“纯”对象一样。当涉及到像.toString() 这样的方法或者当它被JSON.stringify() 转换时,它是一个数组会影响它的行为。它的属性将在 JSON 表示中找到。

您可以通过将其转换为 (Object.assign()-ing) 到如下对象来可视化它的属性:

var array=[1,2,3];
array.key='hello';
console.log(JSON.stringify(Object.assign({},array)));
// {"0":1,"1":2,"2":3,"key":"hello"}

这会将数组显示为一个对象(索引号将显示为带有相关值的字符串属性名称)。

【讨论】:

  • 谢谢你的回答,我现在明白了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多