JavaScript中向现有数组添加新值

270
在PHP中,我会做这样的事情:
$array = array();
$array[] = "value1";
$array[] = "value2";
$array[] = "value3";

我该如何在JavaScript中实现相同的操作?


64
jQuery不是一种语言,JavaScript才是。 - mpen
82
http://i.stack.imgur.com/ssRUr.gif - Broxzier
5
JavaScript 是实现优秀的 jQuery 库所使用的编程语言。 - Davor
我是唯一被允许决定形容词归属于名词的人。 - Bryan Grace
你可以使用一个函数来实现动态解决方案: animationList[addkey()] function addkey() { var t=ac; ac++; console.log(t); return t; } - dazzafact
8个回答

406

您不需要使用jQuery。请使用纯JavaScript。

var arr = new Array();
// or var arr = [];
arr.push('value1');
arr.push('value2');
注意:在JavaScript中,您还可以将对象用作数组,但仍然可以访问数组原型。这使得对象的行为类似于数组:
var obj = new Object();
Array.prototype.push.call(obj, 'value');

会创建一个看起来像这样的对象:

{
    0: 'value',
    length: 1
}

你可以像访问普通数组一样访问值,例如 obj[0]


5
“jQuery”对象是由 $() 返回的,这正是它的工作方式。 - Russ Cam
1
嗯,我相信有一个插件可以让你用jQuery做到那个:P - Ben Shelock
81
使用 [] 代替 new Array(),使用 {} 代替 new Object(),您觉得怎样? - James
7
@J-P:当然,为什么不呢。我只是在尽可能清晰地举例说明。 - David Hellsing
3
@Justin:实际上,它稍微快一点:http://mir.aculo.us/2009/12/24/extreme-javascript-performance-video(从第21张幻灯片开始) - Will Vousden
显示剩余3条评论

109
这与 jQuery 无关,仅涉及一般的 JavaScript。
要在 JavaScript 中创建一个数组:
var a = [];

或者:

var a = ['value1', 'value2', 'value3'];

要在现有数组的末尾添加值:

a.push('value4');
创建新数组,应该使用[]而不是new Array(),原因如下:
  • new Array(1, 2) 等同于 [1, 2],但是new Array(1)并不等同于[1]。相反,它更接近于[undefined],因为传递给Array构造函数的单个整数参数表示所需的数组长度。
  • Array,就像任何其他内置JavaScript类一样,不是关键字。因此,有人可以在您的代码中定义Array以执行除构造数组之外的其他操作。

44
+1 表示支持使用 [] 代替 new Array() - BalusC

36

数组是JavaScript的本地对象,为什么不直接尝试使用其API呢?只要熟悉API就可以在切换到纯JavaScript或另一个框架时节省时间。

有许多不同的可能性,因此,请使用最适合您需求的方法。

创建带值的数组:

var array = ["value1", "value2", "value3"];

在结尾添加值

var array = [];
array.push("value1");
array.push("value2");
array.push("value3");

在开头添加值:

var array = [];
array.unshift("value1");
array.unshift("value2");
array.unshift("value3");

在某个索引位置添加值:

var array = [];
array[index] = "value1";

或者使用splice函数

array.splice(index, 0, "value1", "value2", "value3");

选择您需要的一个。


带有索引的那个对我不起作用。我正在map函数内使用它 $('select[id^="filter_"]').map(function () { var name = $(this).prop('name');
filters[name] = $(this).val();
- Happy Coder

14

有几种方法:

实例化数组:

var arr;

arr = new Array(); // empty array

// ---

arr = [];          // empty array

// ---

arr = new Array(3);
alert(arr.length);  // 3
alert(arr[0]); // undefined

// ---

arr = [3];
alert(arr.length);  // 1
alert(arr[0]); // 3

向数组中添加元素:

arr = [3];     // arr == [3]
arr[1] = 4;    // arr == [3, 4]
arr[2] = 5;    // arr == [3, 4, 5]
arr[4] = 7;    // arr == [3, 4, 5, undefined, 7]

// ---

arr = [3];
arr.push(4);        // arr == [3, 4]
arr.push(5);        // arr == [3, 4, 5]
arr.push(6, 7, 8);  // arr == [3, 4, 5, 6, 7, 8]

使用.push()是向数组添加元素更好的方法,因为您不需要知道已经有多少个元素,并且可以在一个函数调用中添加许多元素。


12
你可以使用标准的JavaScript方法.push()
例如:
var primates = new Array();
primates.push('monkey');
primates.push('chimp');

3

确实,你必须初始化你的数组,然后立即使用array.push()命令行。

var array = new Array();
array.push("first value");
array.push("second value");

2
array = ["value1", "value2", "value3"]

它更多地是JavaScript而不是jQuery。


1
这并不是向数组添加值,而是创建一个已经包含一些值的数组。 - nickf
1
我不会因为那个而给你点踩,但感谢你至少解释了你的观点。 - Antony Hatchkins

1

jQuery 是 JavaScript 的抽象。将 jQuery 视为 JavaScript 的子集,旨在处理 DOM。话虽如此;有添加项目到集合的功能。不过在您的情况下,我会使用基本的 JavaScript:

var array;

array[0] = "value1";
array[1] = "value2";
array[2] = "value3";

... 或者:

var array = ["value1", "value2", "value3"];

... 或者:

var array = [];

array.push("value1");
array.push("value2");
array.push("value3");

6
我会称之为一个“框架”...它也不是一个子集。 - mpen
你应该在第一个示例中将array变量初始化为一个Array对象,否则它将是undefined,无法对其使用push - Ionuț G. Stan
@Ionut G. Stan:我通过 var array = []; 进行数组初始化。 - cllpse
2
@马克:我会把jQuery称为一个库。它是作为库而非框架做宣传的。 - Tim Down
@roosteronacid,我指的是第一个例子。我不知道为什么我在之前的评论中加入了push观察结果。我不知怎么混淆了第一个和第三个例子。 - Ionuț G. Stan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接