Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环遍历数组中的每个对象找到id,将其与数组中的另一个对象匹配,并将它们连接在一起_Javascript_Jquery_Ecmascript 5 - Fatal编程技术网

Javascript 循环遍历数组中的每个对象找到id,将其与数组中的另一个对象匹配,并将它们连接在一起

Javascript 循环遍历数组中的每个对象找到id,将其与数组中的另一个对象匹配,并将它们连接在一起,javascript,jquery,ecmascript-5,Javascript,Jquery,Ecmascript 5,因此,我有一个名为“products”的数组,其中包含对象,每个对象都有一个唯一的id。我还有一个名为“productsAdditionalInfo”的数组,其中包含与“products”相关的其他信息,每个对象都有一个与“products”数组中的一个对象相匹配的所有者id。 “productsAdditionalInfo”在一个数组中可能有许多对象,但相对于该数组始终具有相同的所有者id。 我正在尝试循环遍历'productsAdditionalInfo'数组,获取'owner_id'并

因此,我有一个名为“products”的数组,其中包含对象,每个对象都有一个唯一的id。我还有一个名为“productsAdditionalInfo”的数组,其中包含与“products”相关的其他信息,每个对象都有一个与“products”数组中的一个对象相匹配的所有者id。 “productsAdditionalInfo”在一个数组中可能有许多对象,但相对于该数组始终具有相同的所有者id。

我正在尝试循环遍历'productsAdditionalInfo'数组,获取'owner_id'并将其与products数组中的'id'匹配,然后将名称空间添加为键,将值添加为值,然后将其作为新数组返回。然而,我似乎被困在了第一个障碍上。我在控制台中得到第一个键“Duration”,然后得到未定义的“namespace”。

我希望这是有意义的,如果不是,我已经评论了一个例子,它应该是怎样的。谢谢你的帮助。

编辑:有些人认为这与你将它们合并在一起的地方相似/相同,但我相信我的问题是不同的,因为我没有完全将它们合并在一起,只是将某些信息合并在一起

let products=[{id:102,类型:“玩具”},{id:245,类型:“食品”},{id:312,类型:“衣服”}]
设productsAdditionalInfo=[
[{名称空间:“持续时间”,值:5,所有者id:245},{名称空间:“效果”,值:“尾部”,所有者id:245},
[{名称空间:“供应商”,所有者id:312,值:“rev”},
[{名称空间:“数量”,值:0,所有者id:102},{名称空间:“效果”,值:“毛绒”,所有者id:102}]
]
$.each(productsAdditionalInfo,function)(索引,产品){
log(产品[索引].名称空间);
});
//让whatItShouldBe=[{id:102,类型:“玩具”,数量:0,效果:“毛绒”},{id:245,类型:“食物”,持续时间:5,效果:“尾巴”},{id:312,类型:“衣服”,供应商:“rev”}]

实现这一点的一种方法是循环浏览每个产品,根据
所有者id
检索相关的
产品添加信息。从那里,您可以通过添加创建一个对象,并将两者合并在一起,如下所示:

let products=[{id:102,类型:“玩具”},{id:245,类型:“食品”},{id:312,类型:“衣服”}]
设productsAdditionalInfo=[
[{名称空间:“持续时间”,值:5,所有者id:245},{名称空间:“效果”,值:“尾部”,所有者id:245},
[{名称空间:“供应商”,所有者id:312,值:“rev”},
[{名称空间:“数量”,值:0,所有者id:102},{名称空间:“效果”,值:“毛绒”,所有者id:102}]
]
让merged=products.map(p=>{
var info=productsAdditionalInfo.filter(i=>i[0]。所有者_id==p.id[0]。映射(i=>({[i.namespace]:i.value}));
信息推送(p);
返回对象。分配(…信息);
});
console.log(合并)
let products=[{id:102,类型:“玩具”},{id:245,类型:“食品”},{id:312,类型:“衣服”}]
设productsAdditionalInfo=[
[{名称空间:“持续时间”,值:5,所有者id:245},{名称空间:“效果”,值:“尾部”,所有者id:245},
[{名称空间:“供应商”,所有者id:312,值:“rev”},
[{名称空间:“数量”,值:0,所有者id:102},{名称空间:“效果”,值:“毛绒”,所有者id:102}]
]
const flatPAI=productsAdditionalInfo.flat();
console.log(
products.map(p=>
赋值(p,
…扁平过滤器(
info=>info.owner\u id==p.id
).地图(
info=>({[info.namespace]:info.value})))
)
);
//让whatItShouldBe=[{id:102,类型:“玩具”,数量:0,效果:“毛绒”},{id:245,类型:“食物”,持续时间:5,效果:“尾巴”},{id:312,类型:“衣服”,供应商:“rev”}]

产品[索引]
在每个循环中都是错误的-
产品
此时已经是
产品附加信息
的元素之一;
index
是它的索引。不过,每个
产品本身也是一个对象数组,因此此时可能需要第二个嵌套循环。这是否回答了您的问题?不幸的是,不是因为我没有完全合并它们,我只是希望“名称空间”和“值”被合并。非常感谢!它甚至应该在IE中工作,这是一个不错的奖励,但不是必需的。如果您希望使用jQuery支持IE,可以使用
.apply
$.extend
$.map
$.grep