声明对象数组

IT技术 javascript arrays object declare
2021-03-08 13:56:17

我有一个变量,它是一个数组,我希望数组的每个元素默认充当一个对象。为了实现这一点,我可以在我的代码中做这样的事情。

var sample = new Array();
sample[0] = new Object();
sample[1] = new Object();

这工作正常,但我不想提及任何索引号。我希望我的数组的所有元素都是一个对象。我如何声明或初始化它?

var sample = new Array();
sample[] = new Object();

我尝试了上面的代码,但它不起作用。如何在不使用索引号的情况下初始化对象数组?

6个回答

使用array.push()将项目添加到数组的结尾。

var sample = new Array();
sample.push(new Object());

为此,请n使用for循环。

var n = 100;
var sample = new Array();
for (var i = 0; i < n; i++)
    sample.push(new Object());

请注意,您也可以替换new Array()[]new Object(){}因此它变为:

var n = 100;
var sample = [];
for (var i = 0; i < n; i++)
    sample.push({});

根据声明的含义,您可以尝试数组文字中使用对象文字

var sample = [{}, {}, {} /*, ... */];

编辑:如果您的目标是一个数组,其undefined项目默认为空对象文字,您可以编写一个小的实用程序函数:

function getDefaultObjectAt(array, index)
{
    return array[index] = array[index] || {};
}

然后像这样使用它:

var sample = [];
var obj = getDefaultObjectAt(sample, 0);     // {} returned and stored at index 0.

甚至:

getDefaultObjectAt(sample, 1).prop = "val";  // { prop: "val" } stored at index 1.

当然,直接赋值给 的返回值是getDefaultObjectAt()不行的,所以不能这样写:

getDefaultObjectAt(sample, 2) = { prop: "val" };
@PrasathK,那个downvote 不是我的。如果我理解正确的话,Jeff Shaver 在你的问题下的评论是对的吗?
2021-04-28 13:56:17
@PrasathK,您的意思是动态填充数组(例如通过循环)?然后你应该按照丹尼尔的回答并使用push().
2021-04-29 13:56:17

您可以使用fill()

let arr = new Array(5).fill('lol');

let arr2 = new Array(5).fill({ test: 'a' });
// or if you want different objects
let arr3 = new Array(5).fill().map((_, i) => ({ id: i }));

将创建一个包含 5 个项目的数组。然后你可以使用 forEach 例如。

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

请注意,这样做时new Array(5)它只是一个长度为 5 的对象,并且数组为空。当您使用时,您可以用fill()您想要的任何东西填充每个单独的位置。

我认为与其他答案相比,这是一个难以使用和理解的问题。
2021-05-11 13:56:17
我刚好在你发帖后在首页看到它。它引起了我的注意,因为这是一个有新答案的老问题。
2021-05-13 13:56:17

在看到你在评论中的回应后。似乎最好push按照其他人的建议使用。这样你就不需要知道索引,但你仍然可以添加到数组中。

var arr = [];
function funcInJsFile() {
    // Do Stuff
    var obj = {x: 54, y: 10};
    arr.push(obj);
}

在这种情况下,每次使用该函数时,它都会将一个新对象推送到数组中。

哦,上帝……我在这些对象中有 100 多个变量,对于每个对象或函数调用,我必须在函数开始时为某些变量初始化一些值
2021-05-16 13:56:17

你真的不需要创建 blank Objects。你不能对他们做任何事情。只需根据需要将您的工作对象添加到示例中。使用push丹尼尔IMMS建议,并使用文字作为弗雷德里克·哈米迪建议。您似乎想像 C 一样编写 Javascript。

var samples = []; /* If you have no data to put in yet. */
/* Later, probably in a callback method with computed data */
/* replacing the constants. */
samples.push(new Sample(1, 2, 3)); /* Assuming Sample is an object. */
/* or */
samples.push({id: 23, chemical: "NO2", ppm: 1.4}); /* Object literal. */

我相信 usingnew Array(10)创建一个包含 10 个undefined元素的数组