将相同的多个对象推入多个数组

Posted

技术标签:

【中文标题】将相同的多个对象推入多个数组【英文标题】:Push same multiple objects into multiple arrays 【发布时间】:2019-12-25 13:23:25 【问题描述】:

这是对Make 3 arrays correspond to each other with the first being the object name 的跟进。

创建对象后:

let objName = ["object1", "object2", "object3"];
let xyzArr = ["xyz1", "xyz2","xyz3"];
let theArr = [[], [], []];

objName.forEach((name, index) => 
  window[name] = 
    xyz: xyzArr[index],
    arr: theArr[index]
  ;
);

我使用 getJSON 并希望使用这些值推送到 array: arr[]。我有多个具有arr[] 的对象,我想将值推送到所有对象中。

这是我迄今为止尝试过的:

$.getJSON(json, result => 
    result.forEach((elem, i, array) => 
       object1.arr.push(x:elem.val1, y:elem.val2);
       object2.arr.push(x:elem.val1, y:elem.val2);
       object3.arr.push(x:elem.val1, y:elem.val2);
    ) 
 ); 

当我一一执行此操作时,它会起作用。没有错误。有没有办法让我将这些相同的值推送到我有多少个object[i]

我试过了:

 $.getJSON(json, result => 
    result.forEach((elem, i, array) => 
       (for let j=0; j<=5; j++) 
           object[i].arr.push(x:elem.val1, y:elem.val2);
       )       
    ) 
 );

当我这样做时,我得到Cannot call method 'push' of undefined

有没有办法做到这一点而不会使我的代码又长又笨重?

【问题讨论】:

我很惊讶 object1.data.pushdata 未在 object1 上定义时有效? 那是我的错。让我修复代码。我在这里输入时忘记修复它 制作一个 jsFiddle 来演示这个问题。与您从真实代码中改编的已经有问题的 js 相比,调试起来会容易一千倍。 【参考方案1】:

您可以使用数组来存储对象的集合,而不是使用window 动态创建变量,如下所示:

let xyzArr = ["xyz1", "xyz2", "xyz3"];
let theArr = [[], [], []];
let objects = [];

objName.forEach((name, index) => 
  objects.push(
    xyz: xyzArr[index],
    arr: theArr[index]
  );
);

然后在向每个对象添加数据时,您可以在 objects 数组上使用 .forEach() 循环遍历它,如下所示:

$.getJSON(json, result => 
  result.forEach(elem => 
    objects.forEach(obj => 
      obj.arr.push(
        x: elem.val1,
        y: elem.val2
      );
    );
  );
);

【讨论】:

我不想使用对象数组。无论如何都可以在没有数组的情况下使用 forEach 吗? @noob 嘿,你不能使用数组有什么特别的原因吗?数组非常适合用于此类情况【参考方案2】:

object[i] 指的是一个名为object 的数组,它显然不存在。

试试这个 oneliner:

$.getJSON(json, result => result.forEach((elem, i, array) => window['object' + (i + 1)].data.push( x: elem.val1, y: elem.val2 )));

【讨论】:

我收到TypeError: Cannot read property 'data' of undefined 错误 那么您的result 的长度大于现有对象? 很确定你需要使用window['object' + i+1] 我认为i 的值可能会超过3。您很可能需要一个内部 for 循环来遍历所有对象变量

以上是关于将相同的多个对象推入多个数组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 将 json 对象推入数组

Javascript/Coffeescript 在值相同时对多个键上的对象数组进行排序

如何解析包含多个相同类型的 JSON 对象(不是数组)的 JSON 对象

如何在 Core Data 中为多个对象(相同实体类型)生成数组实例?

Jersey具有相同路径的多个POST方法

使用循环将多个相同形式的数组插入到一个表中