Javascript 如何循环映射函数中已经存在的数组而不复制其内容

Javascript 如何循环映射函数中已经存在的数组而不复制其内容,javascript,reduce,array.prototype.map,Javascript,Reduce,Array.prototype.map,我有以下带有以下数组的代码。我想对它们进行循环并提取一些数据,然后将它们放入最终的数组中。我能做到,但内容是重复的。我试着阅读关于reduce的文章,但不太了解它,也不确定它是否是正确的解决方案。我还设置了一个JSFIDLE var lineItems=[{ id:“li_1HyhAZHk5l44uIELgsMWqHqB”, 对象:“项”, 金额\小计:7500, 总金额:7500, 货币:"加元",, 描述:'斯宾塞', 价格:[对象], 数量:1 }, { id:“li_1HyhAZHk

我有以下带有以下数组的代码。我想对它们进行循环并提取一些数据,然后将它们放入最终的数组中。我能做到,但内容是重复的。我试着阅读关于reduce的文章,但不太了解它,也不确定它是否是正确的解决方案。我还设置了一个JSFIDLE

var lineItems=[{
id:“li_1HyhAZHk5l44uIELgsMWqHqB”,
对象:“项”,
金额\小计:7500,
总金额:7500,
货币:"加元",,
描述:'斯宾塞',
价格:[对象],
数量:1
},
{
id:“li_1HyhAZHk5l44uIELeNUsiZPu”,
对象:“项”,
金额\小计:7500,
总金额:7500,
货币:"加元",,
描述:'格蒂',
价格:[对象],
数量:1
}
]
var arr=[{
id:'prod_IS1wY1JvSv2CJg',
对象:“产品”,
主动:对,
属性:[],
创建日期:1606248785,
描述:'工具架集',
图像:[
'https://files.stripe.com/links/fl_test_raNEqk9ZhzX3WdQsnvXX4gFq'
],
livemode:false,
元数据:{},
名字:'斯宾塞',
语句描述符:null,
类型:“服务”,
单位标签:空,
更新:1606248785
},
{
id:'prod_IS299dMnC13Ezo',
对象:“产品”,
主动:对,
属性:[],
创建日期:1606249543,
描述:'工具架集',
图像:[
'https://files.stripe.com/links/fl_test_QPbrP76uNn4QadgcUwUnkmbe'
],
livemode:false,
元数据:{},
名字:'格蒂',
语句描述符:null,
类型:“服务”,
单位标签:空,
更新:1606249543
}
];
设productArr=[];
arr.map((项目)=>{
lineItems.map((行)=>{
产品推送({
图像:item.images[0],
名称:item.name,
价格:行金额\总计,
});
});
});
console.log(productArr)

虽然没有在您的问题中直接表达,但您似乎希望在javascript中加入。我看到的与这两者相关的东西只有产品中的“名称”和行项目中的“描述”。所以在上面做一个循环连接

下面是一些使用您的示例的示例代码,但仅限于相关内容:

var lineItems=[
{总额:7500,描述:'斯宾塞'},
{总金额:7500,描述:'TheGertie'}
]
var arr=[
{images:['Spencer Image 1'],名称:'The Spencer'},
{图像:['Gertie Image 1'],名称:'The Gertie'}
]
让连接=arr
.flatMap(a=>lineItems.map(li=>({a,li})))
.filter(obj=>obj.a.name==obj.li.description)
.map(obj=>({
image:obj.a.images[0],
姓名:obj.a.name,
价格:obj.li.amount\总计
}));
控制台日志(已加入);

虽然没有在您的问题中直接表达,但您似乎希望在javascript中加入。我看到的与这两者相关的东西只有产品中的“名称”和行项目中的“描述”。所以在上面做一个循环连接

下面是一些使用您的示例的示例代码,但仅限于相关内容:

var lineItems=[
{总额:7500,描述:'斯宾塞'},
{总金额:7500,描述:'TheGertie'}
]
var arr=[
{images:['Spencer Image 1'],名称:'The Spencer'},
{图像:['Gertie Image 1'],名称:'The Gertie'}
]
让连接=arr
.flatMap(a=>lineItems.map(li=>({a,li})))
.filter(obj=>obj.a.name==obj.li.description)
.map(obj=>({
image:obj.a.images[0],
姓名:obj.a.name,
价格:obj.li.amount\总计
}));
控制台日志(已加入);

如果您知道两个数组的长度和顺序相同,则可以使用单个映射调用并通过索引引用第二个
行项目
数组

const output = arr.map((o, i) => ({
  name: o.name, 
  image: o.images[0], 
  price: lineItems[i].amount_total}
));
或者使用
find()
检索相关对象

const outputUsingFind = arr.map(o => {
    const lineItem = lineItems.find(item => item.description === o.name);
    // ** add lineItem valid check here **
    return {
      name: o.name, 
      image: o.images[0], 
      price: lineItem.amount_total};
  });

var lineItems=[{amount_小计:7500,amount_总计:700,描述:'The Spencer',},{amount_小计:7500,amount_总计:500,描述:'The Gertie',}];
var arr=[{images:['spencer image'],name:'The spencer',},{images:['gertie image'],name:'The gertie'}];
//由于数组的顺序相同,因此可以使用
//从映射传递的索引。
常量输出=arr.map((o,i)=>({
姓名:o.name,
image:o.images[0],
价格:行项目[i]。金额\总计}
));
控制台日志(输出);
//如果两个数组的顺序不相同,则可以使用find()检索
//属性的第二个对象(您需要检查
const outputUsingFind=arr.map(o=>{
const lineItem=lineItems.find(item=>item.description==o.name);
//**在此处添加行项目有效复选框**
返回{
姓名:o.name,
image:o.images[0],
价格:lineItem.amount\u total};
});
console.log(outputUsingFind);

.as console wrapper{max height:100%!important;top:0;}
如果您知道两个数组的长度和顺序相同,则可以使用单个映射调用并通过索引引用第二个
行项
数组

const output = arr.map((o, i) => ({
  name: o.name, 
  image: o.images[0], 
  price: lineItems[i].amount_total}
));
或者使用
find()
检索相关对象

const outputUsingFind = arr.map(o => {
    const lineItem = lineItems.find(item => item.description === o.name);
    // ** add lineItem valid check here **
    return {
      name: o.name, 
      image: o.images[0], 
      price: lineItem.amount_total};
  });

var lineItems=[{amount_小计:7500,amount_总计:700,描述:'The Spencer',},{amount_小计:7500,amount_总计:500,描述:'The Gertie',}];
var arr=[{images:['spencer image'],name:'The spencer',},{images:['gertie image'],name:'The gertie'}];
//由于数组的顺序相同,因此可以使用
//从映射传递的索引。
常量输出=arr.map((o,i)=>({
姓名:o.name,
image:o.images[0],
价格:行项目[i]。金额\总计}
));
控制台日志(输出);
//如果两个数组的顺序不相同,则可以使用find()检索
//属性的第二个对象(您需要检查
const outputUsingFind=arr.map(o=>{
const lineItem=lineItems.find(item=>item.description==o.name);
//**添加行项目val