我需要一些关于编程任务的帮助,这个任务相对直接但对我来说有挑战性。
有两个数组对象,一个长数组和一个短数组:
var arrayShort = [
{
id: 'A',
name: 'first'
},{
id: 'B',
name: 'second'
},{
id: 'C',
name: 'third'
}
]
var arrayLong = [
{
id: 'A',
name: 'firstSub1'
},{
id: 'A',
name: 'firstSub2'
},{
id: 'A',
name: 'firstSub3'
},{
id: 'B',
name: 'secondSub1'
},{
id: 'B',
name: 'secondSub2'
},{
id: 'B',
name: 'secondSub3'
},{
id: 'C',
name: 'thirdSub1'
},{
id: 'C',
name: 'thirdSub2'
},{
id: 'C',
name: 'thirdSub3'
}
]
我该如何根据共享的ID将它们合并在一起,以获得以下结果:
var arrayCombined = [
{
id: 'A',
name: 'first'
},{
id: 'A',
name: 'firstSub1'
},{
id: 'A',
name: 'firstSub2'
},{
id: 'A',
name: 'firstSub3'
},{
id: 'B',
name: 'second'
},{
id: 'B',
name: 'secondSub1'
},{
id: 'B',
name: 'secondSub2'
},{
id: 'B',
name: 'secondSub3'
},{
id: 'C',
name: 'third'
},{
id: 'C',
name: 'thirdSub1'
},{
id: 'C',
name: 'thirdSub2'
},{
id: 'C',
name: 'thirdSub3'
},
]
重要提示
顺序很重要。
我的尝试
for (var i = 0; i < arrayShort.length; i++) {
var itemShort = arrayShort[i]
console.log(itemShort)
for (var j = 0; j < arrayLong.length; j++) {
var itemLong = arrayLong[j]
if (itemLong.id === itemShort.id) {
console.log(itemLong)
arrayShort.splice(j + 1, 0, arrayLong)
}
}
}
var arrayCombined = arrayShort
console.log(arrayCombined)
这会导致无限循环,但我不确定为什么。一般来说,我知道嵌套循环和条件语句是个坏消息。
有更好的方法(在思维上、代码等方面)来解决这个问题吗?
这是一个 Codepen,打开开发工具查看。
注:
- 首选 Vanilla Javascript 解决方案,但也可以看到使用 Lodash 或 Underscores 完成此任务的方式。通常,我感觉这两个库都可以使这种类型的任务变得超级容易,但我似乎永远无法准确理解。
- 尝试找到正确的搜索词对于这个问题来说是出奇的困难... 有什么建议吗?
感谢反馈/见解。
arrayShort.splice(j + 1, 0, arrayLong)
是一个不好的想法。最好尝试构建一个新数组,这样更容易和更清晰。 - Bergijson
数据块,我需要从外部 API 接收并解析成我所需的数据结构。 - Isaac Gregson