循环遍历数组数组中的每个对象找到 id,将其与数组中的另一个对象匹配并将它们连接在一起
Loop through each object in a array of arrays find the id, match it to another object in an array and concatenate them together
所以我有一个名为 'products' 的数组,其中包含对象,每个对象都有一个唯一的 ID。我还有另一个名为 'productsAdditionalInfo' 的数组,其中包含与 'products' 相关的附加信息,并且每个对象都有一个 owner_id 与 'products' 数组中的一个对象匹配。
'productsAdditionalInfo' 可能在一个数组中有许多对象,但相对于该数组将始终具有相同的 owner_id。
我正在尝试遍历 'productsAdditionalInfo' 数组获取 'owner_id' 并将其与 products 数组中的 'id' 匹配,然后将命名空间添加为键,将值添加为值和然后 return 它作为一个新数组。但是,看来我遇到了第一个障碍。我在控制台中得到 "Duration" 的第一个键,然后我得到未定义的 'namespace'。
我希望这是有道理的,如果不是我已经注释掉了它应该如何的例子。我感谢任何帮助。
编辑:有些人建议这 similar/the 与 相同,您将它们合并在一起,但我相信我的问题是不同的,因为我没有完全将它们合并在一起只是某些信息。
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>
实现此目的的一种方法是遍历每个产品,根据 owner_id
检索关联的 productAdditionsInfo
。从那里你可以从添加中创建一个对象并将两者合并在一起,就像这样:
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
.
分组
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>
所以我有一个名为 'products' 的数组,其中包含对象,每个对象都有一个唯一的 ID。我还有另一个名为 'productsAdditionalInfo' 的数组,其中包含与 'products' 相关的附加信息,并且每个对象都有一个 owner_id 与 'products' 数组中的一个对象匹配。
'productsAdditionalInfo' 可能在一个数组中有许多对象,但相对于该数组将始终具有相同的 owner_id。
我正在尝试遍历 'productsAdditionalInfo' 数组获取 'owner_id' 并将其与 products 数组中的 'id' 匹配,然后将命名空间添加为键,将值添加为值和然后 return 它作为一个新数组。但是,看来我遇到了第一个障碍。我在控制台中得到 "Duration" 的第一个键,然后我得到未定义的 'namespace'。
我希望这是有道理的,如果不是我已经注释掉了它应该如何的例子。我感谢任何帮助。
编辑:有些人建议这 similar/the 与
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>
实现此目的的一种方法是遍历每个产品,根据 owner_id
检索关联的 productAdditionsInfo
。从那里你可以从添加中创建一个对象并将两者合并在一起,就像这样:
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
.
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>