如何将dummy数据对象数组循环合并至MongoDB返回的用户对象数组
合并MongoDB用户数组与循环复用的模拟数据数组
嘿,这事儿其实不难!你需要的就是遍历用户数组时循环复用dummyData里的对象,核心是用「取模运算」来实现循环,下面给你两种常用的实现方式:
方法一:使用Array.map()(更简洁的函数式写法)
map方法天生适合这种遍历数组并返回新数组的场景,代码可读性很高:
let users = [ { name: "John", lastName: "Henry" }, { name: "Peter", lastName: "Pumpkin" }, { name: "John", lastName: "Snow"}, { name: "Jack", lastName: "Stevens"} ]; let dummyData = [ { callTime: "Call Now", userType: "End User(Agent)", callStatus: "Called", orderStatus: "Order Placed(1)", consultant: "Bennie Hennie", company: "Some Company" }, { callTime: "Call Now", userType: "End User(James Bond)", callStatus: "Pending Call", orderStatus: "No Order Placed", consultant: "Sally Sue", company: "Super Sonic & Co" }, { callTime: "Call Now", userType: "End User(Peter Griffin)", callStatus: "Called", orderStatus: "Order Placed(1)", consultant: "Jenny Oldstone", company: "Witcher School" } ]; // 合并数组,循环复用dummyData const mergedUsers = users.map((user, index) => { // 用取模运算获取循环的dummyData索引:当index超过dummyData长度时,从头开始 const dummyIndex = index % dummyData.length; // 扩展运算符合并两个对象,dummyData的字段会覆盖user里同名的(如果有的话) return { ...user, ...dummyData[dummyIndex] }; }); console.log(mergedUsers);
方法二:使用for循环(你提到的传统写法)
如果你更习惯for循环,逻辑是一样的,只是写法不同:
const mergedUsers = []; const dummyLength = dummyData.length; for (let i = 0; i < users.length; i++) { const dummyIndex = i % dummyLength; // 合并对象,这里也可以用Object.assign({}, users[i], dummyData[dummyIndex]) const mergedUser = { ...users[i], ...dummyData[dummyIndex] }; mergedUsers.push(mergedUser); } console.log(mergedUsers);
关键逻辑解释
index % dummyData.length:这是实现循环复用的核心。比如当i=3(第4个用户),3%3=0,就会取dummyData的第0个元素;i=4时,4%3=1,取第1个元素,以此类推,完美实现循环。- 对象合并:用
{...a, ...b}扩展运算符可以把两个对象的属性合并成一个新对象,避免修改原有的users或dummyData数组(如果需要保留原数据的话)。如果你的项目环境不支持ES6扩展运算符,也可以用Object.assign({}, user, dummyItem)来实现同样的效果。
合并后的结果示例
第一个用户的合并结果和你期望的完全一致:
{ name: "John", lastName: "Henry", callTime: "Call Now", userType: "End User(Agent)", callStatus: "Called", orderStatus: "Order Placed(1)", consultant: "Bennie Hennie", company: "Some Company" }
内容的提问来源于stack exchange,提问作者Niishaw
相关产品推荐
相关产品推荐

