Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将具有数组作为属性的对象转换为对象数组_Javascript_Arrays - Fatal编程技术网

Javascript 将具有数组作为属性的对象转换为对象数组

Javascript 将具有数组作为属性的对象转换为对象数组,javascript,arrays,Javascript,Arrays,我该如何转身 {"service":[["A"],["B"]],"cost":[[20],[50]]} 进入 我甚至不知道从哪里开始诚实地…你可以变换你的对象以获得你想要的结果,首先,使用.map()将你的对象变换为以下形式: 接下来,将这两个内部数组压缩在一起(第一个数组的第一个元素与第二个数组的第一个元素进行分组,第一个数组的第二个元素与第二个数组的第二个元素进行分组),分组方法如下: const obj={“服务”:[[“A”],[“B”]],“成本”:[[20],[50]}; con

我该如何转身

{"service":[["A"],["B"]],"cost":[[20],[50]]}
进入


我甚至不知道从哪里开始诚实地…

你可以变换你的对象以获得你想要的结果,首先,使用
.map()
将你的对象变换为以下形式:

接下来,将这两个内部数组压缩在一起(第一个数组的第一个元素与第二个数组的第一个元素进行分组,第一个数组的第二个元素与第二个数组的第二个元素进行分组),分组方法如下:

const obj={“服务”:[[“A”],[“B”]],“成本”:[[20],[50]};
const[first,…r]=Object.entries(obj.map([k,vals])=>vals.map([v])=>({[k]:v}));
const zip=first.map((o,i)=>Object.assign(o,…r.map(arr=>arr[i]));

console.log(压缩)
array reduce是一个起点-尽管,数据以
[[“A”],[“B”]
格式似乎很奇怪,可能只是
[“A”,“B”]
,除非存在
[[“A”,“C”],[“B”]
的可能性,谢谢@JaromandaX,我会看看我能用reduce做些什么,然后从那里开始!是的,这种结构的原因是React Hooks中的useState如何构建服务。再次感谢你的帮助!可以使用for/in循环,也可以使用map/reduce。重点是,基本上有两个问题。1.迭代服务值以创建对象2。迭代成本值并分配给相应的对象。是否假设服务值的计数与成本值的计数相同?嘿@HariLubovac,是的,这就是useState钩子构建它的方式(或者至少是我管理它的方式)。永远都会有一个服务,一个成本,同时我会仔细研究这个尼克,谢谢!我需要努力理解数据结构。更多的练习是应该的。再次感谢你@真的,不用担心。如果不习惯,语法可能会有点令人生畏。以下是一些可能会有所帮助的链接和链接。如果您对语法有任何其他问题,请告诉我这很有趣,因为我使用React定期处理扩展和分解,但我显然对它们没有深入的理解。我将寻找一些资源,在那里我可以练习更复杂的问题:)看看你是如何回答这个问题的,我相信以我目前的知识,我不可能做到这一点。或者至少,没有那么优雅或迅速。这告诉我我需要努力解决问题。。。
[{service:"A", cost:20},{service:"B", cost:50}]
[
  [
    {
      "service": "A"
    },
    {
      "service": "B"
    }
  ],
  [
    {
      "cost": 20
    },
    {
      "cost": 50
    }
  ]
]