将属性添加到javascript数组

默认情况下,数组具有“长度”属性。

我可以向他们添加自定义属性吗?

不必让它们成为对象

ellabeauty asked 2020-08-12T05:08:54Z
5个解决方案
51 votes

当然。

var arr = [1,2,3,4,5];
arr.prop = 'value';

数组已经是JavaScript中的对象-它们仅具有一些额外的功能和特殊的文字语法。

Kevin Ennis answered 2020-08-12T05:09:05Z
31 votes

正如其他答案所述,这是完全有可能的,因为JavaScript中的数组只是对象。 但是,仍然存在一个问题,即它是否是一个好主意。

这是一个“编码风格”的问题,因此很难客观地说,但是道格拉斯·克罗克福德对此没有任何问题(至少在某些情况下)。 在JavaScript:The Good Parts中,他实际上使用了向数组添加“总计”方法的示例。

因为数组实际上是一个对象,所以我们可以将方法直接添加到单个数组中:

arr = arr.slice(1);

由于字符串arr = arr.slice(1);不是整数,因此将total属性添加到数组不会更改其长度。

(第62页,Crockford的“ JavaScript的好部分”,可在Google图书中找到)

但是,值得一提的是,这些额外的属性不包含在JSON序列化中,如果您执行arr = arr.slice(1);之类的操作,它们将被丢弃。

cloudfeet answered 2020-08-12T05:09:48Z
3 votes

如果您打算将其隐藏在Array等中?[至少那是我想要的。]

Object.defineProperty( targ, "myVal", { enumerable: false, writable: true } );

然后数组不会将其添加到长度,因此它是一个属性而不是一个值,我猜您可以说。

然后,如果要查看对象中的键,则Object.keys将看不到,而Reflect.ownKeys将看到。

[HTTPS://developer.Mozilla.org/恩-US/docs/Web/JavaScript/reference/global_objects/reflect/own keys]

Reflect版本的defineProperty将返回成功或失败,而Object则返回传递的对象。

请记住,preventExtensions会(如它所说的)阻止您或其他人扩展它们。[https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions]

Master James answered 2020-08-12T05:10:33Z
2 votes

是。 您可以通过声明它们将它们添加到对象中,也可以使用Array.prototype扩展Array。

var j = new Array();
j.yourprop = "foo";
Dave Thomas answered 2020-08-12T05:10:54Z
0 votes

数组是对象,因此可以向它们添加自己的属性:

var arr = [1,2,3];arr.foo ='bar';

从其他答案中扩展出来,以下是在数组上进行迭代的以下方法,不包括自定义属性。

1)使用标准的循环

for (let i = 0; i < arr_length; i++)
    console.log(arr[i]);

或者如果不使用ES6:

for (var i = 0; i < arr.length; i++)
    console.log(arr[i]);

2)使用length回路(ES6 +)

for (let el of arr)
    console.log(el)

3)使用length(ES6 +)

arr.forEach(el => console.log(el));

要么

arr.forEach(function(el) {
    console.log(el);
});

遍历数组,包括所有属性(例如自定义属性length

for (let prop in arr)
    console.log(prop);

或者如果不使用ES6:

for (var prop in arr)
    console.log(prop);
David Callanan answered 2020-08-12T05:11:54Z
translate from https://stackoverflow.com:/questions/9952126/add-property-to-javascript-array