提问人:Ev Gen 提问时间:7/28/2023 更新时间:7/28/2023 访问量:28
坚持使用具有 ID 的对象的比较数组
Stuck with comparison arrays with objects which has IDs
问:
我有 2 个带有对象的数组
- 与汽车品牌
const brands = [
{ id: 1, name: "Mercedes Benz", bodyType: [1, 3] },
{ id: 2, name: "Audi", bodyType: [1, 2] },
{ id: 3, name: "BMW", bodyType: [3, 4] },
{ id: 4, name: "Mazda", bodyType: [1, 2, 4] }
];
- 体型
const bodyTypes = [
{ id: 1, type: "Sedan"},
{ id: 2, type: "Coupe"},
{ id: 3, type: "Hatchback"},
{ id: 4, type: "SUV"}
];
- 我选择了类型
const pickedTypes = [2, 4] // Coupe & SUV
如何比较这两个数组以获得具有 pickedTypes 中正文类型的品牌的新数组
我试图得到一个我想要的数组
const brands = [
{ id: 1, name: "Mercedes Benz", bodyType: [1, 3] },
{ id: 2, name: "Audi", bodyType: [1, 2] },
{ id: 3, name: "BMW", bodyType: [3, 4] },
{ id: 3, name: "Mazda", bodyType: [1, 2, 4] }
];
const bodyTypes = [
{ id: 1, type: "Sedan"},
{ id: 2, type: "Coupe"},
{ id: 3, type: "Hatchback"},
{ id: 4, type: "SUV"}
];
const pickedTypes = [2, 4] // coupe & suv
let newBrandsByPickedTypes = [];
// loop for every type
for(let i = 0; i < pickedTypes.length; i++){
// loop for every brand
for(let k = 0; k < brands.length; k++){
// loop for every type in brand
brands[k].bodyType.forEach((type) => {
// if brand has type that in pickedTypes push this brand to newBrandsByPickedTypes
if(type === pickedTypes[i]){
newBrandsByPickedTypes.push(brands[k])
}
})
}
}
newBrandsByPickedTypes && console.log(newBrandsByPickedTypes); // output audi, mazda, bmw
实际上,我陷入了这么多循环中。
看起来它正在工作,但我有一个类似警告的东西:[圆形对象对象]]
答:
0赞
Abhishek Prashant
7/28/2023
#1
您可以根据 pickedTypes 中的任何 ID 是否存在于单个品牌的 bodyType 数组中,从 brands 数组中进行筛选。这是一个可能的解决方案
brands.filter(brand => pickedTypes.some(type => brand.bodyType.includes(type))).map(brand => brand.name)
输出
['Audi', 'BMW', 'Mazda']
在这种情况下,由于 pickedType 已经包含 id 而不是名称,因此不需要 bodyTypes 数组,如果 pickedTypes 有“Sedan”、“Coupe”等,您可以映射 bodyTypes 中的 id 并使用该数组进行搜索
0赞
gachaftcode
7/28/2023
#2
我可以看到您正在尝试比较两个数组,以获得一个新数组,其中包含具有 pickedTypes 数组中的正文类型的品牌。您的代码可以正常工作,但您会收到有关圆形对象的警告消息。
此警告通常意味着代码正在对象之间创建循环引用,从而导致无限循环。我建议检查您的对象,看看其中是否有任何循环引用。
此外,您可以使用 filter() 方法筛选掉 pickedTypes 数组中没有正文类型的品牌来简化代码。下面是一个示例:
brands.filter(brand => pickedTypes.some(type => brand.bodyType.includes(type))).map(brand => brand.name)
此代码使用 filter() 方法筛选出 pickedTypes 数组中没有任何正文类型的品牌。some() 方法用于检查品牌中是否有任何体型在 pickedTypes 数组中。
我希望这会有所帮助!
评论