Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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,我在使用JS时遇到了一个有趣的数组操作问题。我知道这个问题可以通过一个巨大的if-elseif子句来解决,但实际上我正在寻找一个更具伸缩性的答案 我有两个数组(我们称之为输入和输出),它们的内容彼此相关。第一个数组包含一个ID列表,第二个数组实际上是来自与输入数组的ID匹配的API(我对API没有权限)的响应 示例:如果我有一个[1,2,3]的输入数组,那么我将得到一个的输出数组 [ { id: 1, data: "Some data for id 1" }, {

我在使用JS时遇到了一个有趣的数组操作问题。我知道这个问题可以通过一个巨大的if-elseif子句来解决,但实际上我正在寻找一个更具伸缩性的答案

我有两个数组(我们称之为输入和输出),它们的内容彼此相关。第一个数组包含一个ID列表,第二个数组实际上是来自与输入数组的ID匹配的API(我对API没有权限)的响应


示例:如果我有一个
[1,2,3]
的输入数组,那么我将得到一个
的输出数组

[
  { id: 1, data: "Some data for id 1" },
  { id: 2, data: "Some data for id 2" },
  { id: 3, data: "Some data for id 3" }
]
[
  { id: 1, data: "Some data for id 1" },
  { id: 2, data: "Some data for id 2" }
]
到目前为止还不错。但是,如果我有一个类似于
[1,2,2]
的输入数组,则会出现问题,这是可能的,也是有意的。在这种情况下,我以一个

[
  { id: 1, data: "Some data for id 1" },
  { id: 2, data: "Some data for id 2" },
  { id: 3, data: "Some data for id 3" }
]
[
  { id: 1, data: "Some data for id 1" },
  { id: 2, data: "Some data for id 2" }
]
在上述情况下,我需要让输出数组的长度为
length==3
,第三项是第二项的副本,如下所示

[
  { id: 1, data: "Some data for id 1" },
  { id: 2, data: "Some data for id 2" },
  { id: 2, data: "Some data for id 2" }
]
为了清楚起见,还有两个例子: 输入:
[4,4,4]
,我得到的是:

[
  { id: 4, data: "Some data for id 4" }
]
[
  { id: 3, data: "Some data for id 3" },
  { id: 7, data: "Some data for id 7" }
]
我需要达到的目标是:

[
  { id: 4, data: "Some data for id 4" },
  { id: 4, data: "Some data for id 4" },
  { id: 4, data: "Some data for id 4" }
]
[
  { id: 3, data: "Some data for id 3" },
  { id: 3, data: "Some data for id 3" },
  { id: 7, data: "Some data for id 7" },
]
最后一个,输入:
[3,3,7]
我得到的是:

[
  { id: 4, data: "Some data for id 4" }
]
[
  { id: 3, data: "Some data for id 3" },
  { id: 7, data: "Some data for id 7" }
]
我需要达到的目标是:

[
  { id: 4, data: "Some data for id 4" },
  { id: 4, data: "Some data for id 4" },
  { id: 4, data: "Some data for id 4" }
]
[
  { id: 3, data: "Some data for id 3" },
  { id: 3, data: "Some data for id 3" },
  { id: 7, data: "Some data for id 7" },
]

我使用的最大数组长度是3,因此一个if-else子句比较长度和值就足够了,但是是否有一种动态的、可伸缩的方式来以预期的方式操纵输出数组?我无法从我的头脑中思考任何事情

编辑:我应该补充一点,数据部分可以是任何东西,而不仅仅是我在这里给出的文本


提前谢谢

map功能允许我们从现有阵列创建新阵列

const outputArray=inputArray.map(id=>{
返回{
id:id,
数据:“id的某些数据”+id
}
});

const output=input.map(id=>transformToOutput(id))
我不明白为什么您认为这个问题很难扩展,或者需要复杂的逻辑。我错过了什么重要的事情吗?@HåkenLid我也不太确定。似乎需要更多的工作来缩小输出阵列。生成1:1的结果似乎是最简单的事情——即使是循环也会自然地对(输入的id)输出执行相同的
。为了消除重复,需要更多的代码,因此需要更复杂的解决方案。很抱歉,我应该说得更清楚。本质上,数据部分可以是任何东西,因为它是来自API的数据响应。这就是为什么不能直接从输入数组构造输出数组的原因。我看不出有什么方法这改变了一切。最简单的方法是为输入数组中的每一项获得一个结果。任何导致输入和输出数量不一致的事情都会变得更复杂,甚至稍微复杂一点。