因此,我有一个名为“产品”的数组,其中包含对象,并且每个对象都有唯一的ID。我还有另一个名为“ productsAdditionalInfo”的数组,其中包含与“ products”有关的其他信息,每个对象都有一个owner_id,该owner_id与“ products”数组中的一个对象匹配。
“ productsAdditionalInfo”在一个数组内可能有许多对象,但相对于该数组,总是具有相同的owner_id。
我正在尝试遍历'productsAdditionalInfo'数组以获取'owner_id'并将其与products数组中的'id'匹配,然后将名称空间添加为键,并将值添加为值,然后将其返回为新数组。但是,似乎我遇到了第一个障碍。我在控制台中获得“ Duration”的第一个键,然后得到未定义的“名称空间”。
我希望这是有意义的,如果没有的话,我已经举了一个关于应该如何做的例子。感谢您的帮助。
编辑:有人建议这与another question类似/相同,在这里您将它们合并在一起,但是我相信我的问题有所不同,因为我没有完全将它们仅仅合并到某些信息中。
let products = [ {id: 102, type: "toy"}, {id: 245, type: "food"}, {id: 312, type: "clothes"} ]
let productsAdditionalInfo = [
[{namespace: "Duration", value: 5, owner_id: 245}, {namespace: "effect", value: "Tail", owner_id: 245}],
[{namespace: "Supplier", owner_id: 312, value: "rev"}],
[{namespace: "amount", value: 0, owner_id: 102}, {namespace: "effect", value: "plush", owner_id: 102}]
]
$.each(productsAdditionalInfo, function( index, product ) {
console.log( product[index].namespace );
});
// let whatItShouldBe = [ {id: 102, type: "toy", amount: 0, effect: "plush" }, {id: 245, type: "food", Duration: 5, effect: "Tail"}, {id: 312, type: "clothes", Supplier: "rev"} ]
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
答案 0 :(得分:1)
一种实现此目的的方法是遍历每个产品,并基于productAdditionsInfo
检索关联的owner_id
。在这里,您可以从添加项中创建一个对象,并将两者合并在一起,如下所示:
let products = [{id: 102, type: "toy"}, {id: 245, type: "food"}, {id: 312, type: "clothes"}]
let productsAdditionalInfo = [
[{namespace: "Duration", value: 5, owner_id: 245}, {namespace: "effect", value: "Tail", owner_id: 245}],
[{namespace: "Supplier", owner_id: 312, value: "rev"}],
[{namespace: "amount", value: 0, owner_id: 102}, {namespace: "effect", value: "plush", owner_id: 102}]
]
let merged = products.map(p => {
var info = productsAdditionalInfo.filter(i => i[0].owner_id == p.id)[0].map(i => ({ [i.namespace]: i.value }));
info.push(p);
return Object.assign(...info);
});
console.log(merged);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
这假设productsAdditionalInfo
中的第二级数组总是 由同一owner_id
分组。
答案 1 :(得分:1)
let products = [ {id: 102, type: "toy"}, {id: 245, type: "food"}, {id: 312, type: "clothes"} ]
let productsAdditionalInfo = [
[{namespace: "Duration", value: 5, owner_id: 245}, {namespace: "effect", value: "Tail", owner_id: 245}],
[{namespace: "Supplier", owner_id: 312, value: "rev"}],
[{namespace: "amount", value: 0, owner_id: 102}, {namespace: "effect", value: "plush", owner_id: 102}]
]
const flatPAI = productsAdditionalInfo.flat();
console.log(
products.map( p =>
Object.assign(p,
...flatPAI.filter(
info => info.owner_id == p.id
).map(
info => ({[info.namespace]: info.value})))
)
);
// let whatItShouldBe = [ {id: 102, type: "toy", amount: 0, effect: "plush" }, {id: 245, type: "food", Duration: 5, effect: "Tail"}, {id: 312, type: "clothes", Supplier: "rev"} ]
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>