通过for循环增强数组仅保留最后一个对象?

雨果·洛佩兹(Hugo LOPEZ)

鉴于我的核心数据如下:

var data = [
    { name: "Student01", type: "received", grades: [ 12,12, 17, 17, 14.5, 10, 16, 15.5, 15.5, 15 ] },
    { name: "Student02", type: "given", grades: [ 11,6,15, 12 ] },
    { name: "Student03", type: "received", grades: [ 12,12, 17, 17, 14.5, 10, 16, 15.5, 15.5, 15 ]  },
    { name: "Student04", type: "given", grades: [ 12,8,13, 12 ] }
];

给定一个模板对象,我应该尊重:

var template = {
  text: "Hello guys !",
  side: "negative",
  name: "Some student",
  x: [ 12.65, 17.92, 16.45 ],
  orientation: "h"
};

然后,我建立一个augmentedDatavia for循环

var augmentedData = [];
for (var i=0; i<data.length;i++){
    var trace = template, 
         student = data[i];
    trace.text = "Step "+i;
    trace.name = student.name;
    trace.x    = student.grades;
    console.log(student, student.type)
    trace.side = student.type == "given"?"negative":"positive";
    console.log(vizGrades[i].type, trace, trace.side)
    augmentedData.push(trace);
}

我最终的增强数据由最后一个对象的4倍组成,其本身是增强的:

console.log(JSON.stringify(augmentedData));

返回:

[
  {"text":"Step 3","side":"negative","name":"Student04","x":[12,8,13,12],"orientation":"h"},
  {"text":"Step 3","side":"negative","name":"Student04","x":[12,8,13,12],"orientation":"h"},
  {"text":"Step 3","side":"negative","name":"Student04","x":[12,8,13,12],"orientation":"h"},
  {"text":"Step 3","side":"negative","name":"Student04","x":[12,8,13,12],"orientation":"h"}
];

怎么了?如何解决?

编辑:预期的输出:

[
  {"text":"Step 0","side":"positive","name":"Student01","x":[12,12, 17, 17, 14.5, 10, 16, 15.5, 15.5, 15],"orientation":"h"},
  {"text":"Step 1","side":"negative","name":"Student02","x":[11,6,15, 12],"orientation":"h"},
  {"text":"Step 2","side":"positive","name":"Student03","x":[12,12, 17, 17, 14.5, 10, 16, 15.5, 15.5, 15],"orientation":"h"},
  {"text":"Step 3","side":"negative","name":"Student04","x":[12,8,13,12],"orientation":"h"}
];
菲利普·托马斯

当前,我们每次迭代都引用相同的对象,并创建相同对象的数组。为了防止这种情况,我们需要将template对象的内容复制trace对象中。

您可以使用浅表副本来完成此操作。有几种方法可以在Javascript中进行浅表复制,我使用了传播运算符(var trace = {...template})将新模板复制到跟踪中。

var data = [
    { name: "Student01", type: "received", grades: [ 12,12, 17, 17, 14.5, 10, 16, 15.5, 15.5, 15 ] },
    { name: "Student02", type: "given", grades: [ 11,6,15, 12 ] },
    { name: "Student03", type: "received", grades: [ 12,12, 17, 17, 14.5, 10, 16, 15.5, 15.5, 15 ]  },
    { name: "Student04", type: "given", grades: [ 12,8,13, 12 ] }
];

var template = {
  text: "Hello guys !",
  side: "negative",
  name: "Some student",
  x: [ 12.65, 17.92, 16.45 ],
  orientation: "h"
};

var augmentedData = [];
for (var i=0; i<data.length;i++){
    var trace = {...template}, 
         student = data[i];
    trace.text = "Step "+i;
    trace.name = student.name;
    trace.x    = student.grades;
    trace.side = student.type == "given"?"negative":"positive";

    augmentedData.push(trace);
}

console.log(JSON.stringify(augmentedData));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

对象数组的 for 循环仅考虑最后一个对象

在各种循环中追加到同一数组,仅保留最后一个值Bash 4

嵌套循环:最后一个循环总是返回最后一个数组对象

对象数组仅包含最后一个

无法在v-for循环上显示数组中的所有对象,仅显示最后一个对象

如果语句仅保留最后一个值,则嵌套在循环内部

Parse.com将对象保存在循环中,仅保存最后一个对象

如何在对象数组中仅保留对象的一个值

原则仅保留CollectionType中的最后一个实体

Javascript仅将for循环中的最后一个条目推送到对象

如何仅修复Java ArrayList中重复的循环中的最后一个对象

For 循环仅将数组的最后一个值分配给事件侦听器

带for循环的Javascript数组,仅返回最后一个元素

使用jquery创建轮播效果-循环仅返回数组中的最后一个值

foreach循环仅输出数组中的最后一个元素

JavaScript执行循环,但仅查看数组中最后一个元素的结果

foreach循环仅输出$ _POST中的最后一个数组值

循环仅显示最后一个数组元素ActionScript3

在for循环中构造时仅返回数组的最后一个值

为什么我的程序仅打印出数组的最后一个对象值?

OpenGL将仅更新最后一个顶点数组对象

JavaScript [Konva]:数组多个事件仅返回最后一个对象

JSON仅打印数组中的最后一个对象

通过 for 循环向元素添加事件会导致所有元素仅影响循环中的最后一个元素

循环槽对象并选择最后一个对象

增强的For循环-对象数组

循环仅取最后一个值

循环仅获取最后一个obj

字典仅返回for循环内的最后一个键值对