【问题标题】: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 相比,调试起来会容易一千倍。

标签: javascript jquery arrays json object


【解决方案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 循环来遍历所有对象变量
猜你喜欢
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多