Javascript 如何可伸缩地解决这个数组操作问题?
我在使用JS时遇到了一个有趣的数组操作问题。我知道这个问题可以通过一个巨大的if-elseif子句来解决,但实际上我正在寻找一个更具伸缩性的答案 我有两个数组(我们称之为输入和输出),它们的内容彼此相关。第一个数组包含一个ID列表,第二个数组实际上是来自与输入数组的ID匹配的API(我对API没有权限)的响应Javascript 如何可伸缩地解决这个数组操作问题?,javascript,arrays,Javascript,Arrays,我在使用JS时遇到了一个有趣的数组操作问题。我知道这个问题可以通过一个巨大的if-elseif子句来解决,但实际上我正在寻找一个更具伸缩性的答案 我有两个数组(我们称之为输入和输出),它们的内容彼此相关。第一个数组包含一个ID列表,第二个数组实际上是来自与输入数组的ID匹配的API(我对API没有权限)的响应 示例:如果我有一个[1,2,3]的输入数组,那么我将得到一个的输出数组 [ { id: 1, data: "Some data for id 1" }, {
示例:如果我有一个
[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的数据响应。这就是为什么不能直接从输入数组构造输出数组的原因。我看不出有什么方法这改变了一切。最简单的方法是为输入数组中的每一项获得一个结果。任何导致输入和输出数量不一致的事情都会变得更复杂,甚至稍微复杂一点。