JavaScript对象如何包含属性(键值对)的数组(带方括号)?
How can a JavaScript object contain an array (with square brackets) of properties (key value pairs)?
我正在AngularJS中使用一些以前的代码,但是我的问题涉及到传递给视图的对象的奇怪发生。我得到的是一个数组的数组。但是,嵌套数组具有键值对。这在我的理解中没有意义。
此外,我相信它会导致我试图制作的自定义过滤器出现问题。一般的模型过滤器可以工作,但是对特定字段的过滤不起作用。我已经在jsfiddle中测试了这个概念,如果数据被格式化为具有属性的对象数组,则它可以正常工作,但试图复制我当前数据输出错误的结构,因为它不是有效的JavaScript。有人能给我点启示吗?
[Array[0], Array[0], Array[0]...]
0: Array[0]
$$hashKey: "00U"
firstGroupList: Object
length: 0
subTitle: "Capsules"
title: "Esomeprazole Strontium"
__proto__: Array[0]
1: Array[0]
$$hashKey: "01X"
firstGroupList: Object
length: 0
subTitle: "Tablets"
title: "Salsalate"
__proto__: Array[0]
2: Array[0]
3: Array[0]
4: Array[0]
...
像[title: "title", subTitle: "subTitle"]
这样的数组怎么可能存在?
考虑以下内容:
var arr = [1,2,3,4];
var obj = {key: 50, anotherKey: 70};
arr.prop = 'something-something';
obj.prop = 'something-something';
console.log(arr['prop']);
console.log(obj['prop']);
它会输出两次"something-something",内部发生了非常相似的事情——你正在设置一个对象的属性,然后读取它。
但是,区别在于对象的实际类型——arr是Array类型,obj是object类型。请注意,这是而不是我们讨论的变量类型——arr和obj都是"object"类型(您可以使用typeof轻松检查)。对象的类型实际上指的是对象的原型,即该特定变量所基于的对象(对于那些更熟悉OOP的人来说,这类似于您继承的类,除了在这种情况下,它只是从类继承的一个实例,而不是整个新类)。
这里有一篇文章可以帮助你更好地理解原型:http://sporto.github.io/blog/2013/02/22/a-plain-english-guide-to-javascript-prototypes/
回到原始代码,什么时候你会真正注意到arr和obj之间的区别?我首先想到的是JSON:
var strArr = JSON.stringify(arr); // [1,2,3,4]
var strObj = JSON.stringify(obj); // {"key":50,"anotherKey":70,"prop":"something-something"}
因此,如果你在数组上使用prop属性,JSON会"丢失"prop属性——这就是为什么你在设置数组属性时应该小心的一个例子。
最后,如果你想要考虑"prop"属性以及"普通"数组成员,你将如何迭代这个数组?为此,您可以使用For ..in:
for (key in arr) console.log(arr[key]);
/* displays:
1
2
3
4
something-something
*/
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- knockoutjs可观察数组
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 基于分隔符/方括号的实例创建数组
- 将复选框数组传递到 $_GET 的另一种方法 - 除了方括号
- 为什么我在尝试使用字符串将数组转换为 JSON 字符串时会出现方括号
- 将JavaScript数组打印为HTML,方括号和引号完好无损
- JavaScript:如何删除外部数组内的所有方括号
- 在方括号内的数组中推送数据
- 构造对象's数组值的方括号表示法
- 如何删除Javascript数组中的方括号
- JavaScript对象如何包含属性(键值对)的数组(带方括号)?
- 使用JSON将方括号表示数组从javascript转换为C#
- 使用数组方法时返回方括号的函数
- 如何将数组写入nodejs中的文件并保留方括号