用对象初始化循环数组

时间:2016-05-27 15:39:08

标签: javascript arrays

我想在循环中创建这样的数组

dataset: [
{
x: 0,
y: 0,
},
{
x: 1,
y: 0.993,
}
]

但这种方式不正确。

var array =  new Array(10);
                   for (var i = 0; i < 5; ++i) {
                        array[i].x = 1;
                        array[i].y = 2;
                    }

如何以正确的方式初始化?

4 个答案:

答案 0 :(得分:1)

SLaks和斜视所做的评论是正确的,所以这个答案更多地解释了为什么你的代码没有像你认为的那样工作,以及你可以做什么的一个例子。

您创建了一个数组,其中包含10个内容的空间,但您未指定内容的内容,因此数组中不包含任何内容。

var array =  new Array(10);

您可以像这样可视化您的数组: array = [undefined,undefined,undefined,undefined,...

您创建的数组只是尚未定义的10个事物的容器。当您尝试分配数组元素的“x”和“y”属性时,您正在尝试对不存在的内容进行操作。为了得到你想要的东西,我建议用初始值创建一个具有你想要的属性的对象,然后用你的循环来增加你想要的元素数量。

var array = [];
var arrayObject = {x:0,y:0};

for(i=0; i < 10; i++){
    array.push(arrayObject);    
}

答案 1 :(得分:1)

您可以在一个作业行中完成此任务,如下所示;

&#13;
&#13;
var dataSet = (new Array(10)).fill("initial y value").reduce((p,c,i) => p.concat({x:i,y:c}),[]);
console.log(dataSet);
&#13;
&#13;
&#13;

我无法确定您希望拥有的y值,因此插入了数组的初始值。稍后以您喜欢的方式更改它们。我希望它有所帮助。

答案 2 :(得分:0)

new Array(10)替换为

var array = Array.apply( {}, { length: 10 } ).map( function() { return {} });

new Array(10)正在创建一个类似

的数组
[ undefined, undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined]

因此,您尝试在x

上分配undefined

如果你试过

new Array(10).map(function(){ return {}; })它也无效。

这样做的方法是

Array.from(new Array(10), () => { return { x: 1, y: 2 }; })

答案 3 :(得分:0)

JavaScript 中,Array的行为与静态类型的语言不同,因此无需使用固定长度对其进行初始化。

ECMAScript 6 规范及更高版本:

var points = [].fill.call({ length: 5 }, {x: 1, y: 1});

它产生

[{x: 1, y: 1},
 {x: 1, y: 1},
 {x: 1, y: 1},
 {x: 1, y: 1},
 {x: 1, y: 1}]

要确保旧浏览器支持使用for循环:

var points = [{x: 1, y: 1}];
for (var i = 0; i < 5; i++) points.push(points[0]);