Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript对象如何包含属性(键值对)的数组(带方括号)?_Javascript_Arrays_Angularjs - Fatal编程技术网

JavaScript对象如何包含属性(键值对)的数组(带方括号)?

JavaScript对象如何包含属性(键值对)的数组(带方括号)?,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我正在使用AngularJS中以前的一些代码,但我的问题与传递给视图的对象的一个奇怪事件有关。我得到了一个数组。但是,嵌套数组有键值对。在我看来,这毫无意义 此外,我相信这会导致我正在尝试制作的自定义过滤器出现问题。常规模型过滤器可以工作,但对特定字段的过滤不起作用。我已经在jsfiddle中测试了这个概念,如果数据被格式化为具有属性的对象数组,那么它就可以正常工作,但由于它不是有效的JavaScript,因此尝试复制我当前数据输出错误的结构。有人能解释一下我的困境吗 [Array[0], Ar

我正在使用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”并且在内部发生非常相似的事情-您正在设置一个对象的属性,然后读取它

然而,区别在于对象的实际类型——arr是Array类型,obj是object类型。请注意,这是而不是我们正在讨论的变量类型-arr和obj都是“object”类型(您可以使用typeof轻松检查)。对象的类型实际上是指对象的原型,即该特定变量所基于的对象(对于那些更熟悉OOP的人来说,这类似于您从中继承的类,但在这种情况下,它只是从一个类继承的一个实例,而不是一个全新的类)

这里有一篇文章可以帮助您更好地理解原型:

回到原始代码,您何时会真正注意到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”属性以及“normal”数组成员,您将如何迭代此数组?为此,您可以使用中的

for (key in arr) console.log(arr[key]);
/* displays:
1
2
3
4
something-something
*/

数组是对象。可以像普通对象、函数或任何其他对象一样向其添加属性<代码>控制台.log(列表[0]。副标题);//“胶囊”这不是数组的典型用法,但可以方便地保存其他数据。正如@CookieMonester所说,数组是对象,因此在您的情况下,它们是带有对象属性的空数组。关于您的其他代码,如果有问题,您需要发布一个包含最少示例的问题。但是这不是无效的JavaScript,那么它是否等同于[{title:“title”,subTitle:“subTitle”}]?控制台以不同的方式输出它,所以我试图理解正在发生的事情的机制。这不一样,这些属性不是数组内容的一部分,更像是元数据或标头。