从对象中复杂数据结构中的数组传输数据

Transfer data from an array in a complex data structure in an object

提问人:noname028743 提问时间:7/10/2023 最后编辑:noname028743 更新时间:7/11/2023 访问量:54

问:

我的任务是将数据从数组传输到现有对象。我有一个具有不同值(Number,Strings,..)的数组和一个具有 Number,String,1-D Array、2-D Array。现在我想知道将所有数据从数组 MyArray 获取到对象 MyObject 的最智能方法。例如,我的对象如下所示:

const MyObject = {
  String: '',
  Number: 0,
  Array2D: [[0, 0, 0], [0, 0, 0], [0, 0, 0]],
  Array1D: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  Struct: {
    Number: 0,
    Boolean: false,
    Array1D: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  }
};

数组是这样的:

let MyArray [HelloWord,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,true,0,0,0,0,0,0,0,0,0,0];

有没有可能以一种简单的方式做到这一点?我尝试了 Object.key() Object.Value() Object.entities(),但我无法解决我的问题。希望有人能帮我谢谢。

我的第一个解决方案:MyObject 到 String:

let JSON = JSON.stringify(MyObject);

之后,我对每个数组元素使用 typeof:

MyArray.forEach(function(element){
  switch(typeof(element)) {
    case 'string':
      JSON = JSON.replace('""', element);
      break;
    case 'number':
      JSON = JSON.replace('-1', element.toString());
      break;
    case 'boolean':
      JSON = JSON.replace('false', element.toString());
      break;
    default:
      break;
  }
  });

问题:我必须将 MyObject 中的每个数字设置为 -1。此外,无法将值设置为 -1,因为它完全基于在字符串中搜索 -1 并替换它。

我的目标应该是:MyArrays 的每个值都在 MyObject 中注册。

JavaScript Arrays 循环 对象

评论

2赞 freefaller 7/10/2023
除非我遗漏了什么,否则这是不可能回答的......源对象和目标数组之间没有明显的关系。请阅读帮助中心的“如何提问”部分
1赞 bschaffh 7/10/2023
这似乎不可能以自动的方式完成,例如,在解析 MyArray 时,您将如何区分 MyObject 的两个数组 Array2D 和 Array1D?

答:

0赞 Nina Scholz 7/10/2023 #1

您可以获取值并检查值是否为对象,然后获取值或获取此值。

const
    flat = o => o && typeof o === 'object'
        ? Object.values(o).flatMap(flat)
        : [o],
    data = { String: '', Number: 0, Array2D: [[0, 0, 0], [0, 0, 0], [0, 0, 0]], Array1D: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], Struct: { Number: 0, Boolean: false, Array1D: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] } },
    result = flat(data);
    
console.log(result);

0赞 Konrad 7/11/2023 #2

如果项目数始终相同,您可以执行以下操作:

let MyArray =  ['HelloWord',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,true,0,0,0,0,0,0,0,0,0,0];

const MyObject = {
  String: MyArray[0],
  Number: MyArray[1],
  Array2D: [MyArray.slice(2, 5), MyArray.slice(5, 8), MyArray.slice(8, 11)],
  Array1D: MyArray.slice(11, 20),
  Struct: {
    Number: MyArray[21],
    Boolean: MyArray[22],
    Array1d: MyArray.slice(23, 33)
  }
}

console.log(MyObject)