Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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中使用条件从2个数组创建新的json数组?_Javascript_Arrays_Json_For Loop - Fatal编程技术网

如何在JavaScript中使用条件从2个数组创建新的json数组?

如何在JavaScript中使用条件从2个数组创建新的json数组?,javascript,arrays,json,for-loop,Javascript,Arrays,Json,For Loop,我有第一个样本数据 [{start : 1,end : 10 }, {start : 11,end : 20 }, {start : 21,end : 30 }] 和第二个样本数据 [{weight : 7,price : 20 }, {weight : 8 ,price : 10}, {weight : 11 ,price : 14}] 我试图通过我的样本使用for循环,并检查重量是否在开始和结束之间。 例如,如果第二个样本的“重量:7,价格:20”介于第一个样本计数的“开始:1,

我有第一个样本数据

[{start : 1,end : 10 },
{start : 11,end : 20 },
{start : 21,end : 30 }]
和第二个样本数据

[{weight : 7,price : 20 },
  {weight : 8 ,price : 10},
  {weight : 11 ,price : 14}]
我试图通过我的样本使用for循环,并检查重量是否在开始和结束之间。 例如,如果第二个样本的“重量:7,价格:20”介于第一个样本计数的“开始:1,结束:10”之间,则第一个样本计数为1,而sumPrice为20

下一个循环是“重量:8”,价格:10,计数将是1+1,sumPrice是从第一次循环开始的20+10。然后也这样做

我的预期结果是这样的

[{ start : 1,end : 10 ,count : 2 , sumPrice :  30},
{ start : 11,end : 20 ,count : 1 , sumPrice :  14 },
{ start : 21,end : 30 ,count : 0 , sumPrice :  0  }]
顺便说一句,很抱歉我的英语水平,我是javascript新手。
提前感谢。

您想在这里做的是将映射到您的条件数组上,然后减少您的数据数组

const arr1 = [{_id : 1 , start : 1,end : 10 },
  {_id : 2 , start : 11,end : 20 },
  {_id : 3 , start : 21,end : 30 }];

const arr2 = [{weight : 7,price : 20 },
  {weight : 11 ,price : 10},
  {weight : 8 ,price : 14}];



const result = arr1.map((condition) => {
    return arr2.reduce((acc, curr) => {
    if (curr.weight >= condition.start && curr.weight <= condition.end) {
        return {
        ...acc,
        count: acc.count + 1,
        sumPrice: acc.sumPrice + curr.price,
      }
    }
    return acc;
  }, {
    _id: condition._id,
    start: condition.start,
    end: condition.end,
    count: 0,
    sumPrice: 0,
  })
});

console.log(result);

使用jsLinqlib

这里有很多有用的方法

window.onload=function(){
用于(范围内的var i){
var范围=范围[i];
//条件
var matchedItems=$linq(arr)。其中(r=>r.weight>=range.start
&&r.重量c.价格);
range.count=计数;
range.sumPrice=总和;
}
控制台日志(范围);
};
var ranges=[{{u id:1,start:1,end:10},
{{u id:2,开始:11,结束:20},
{u id:3,开始:21,结束:30}];
var arr=[{重量:7,价格:20},
{重量:11,价格:10},
{重量:8,价格:14}]

您应该至少发布一点代码来展示您迄今为止所做的尝试。您好,请与我们分享您所做的尝试以及您面临的问题,我们希望您能付出一些努力,而不是编写所有代码
计数
sumPrice
值的标准是什么?请,你的问题,让它更清楚,并显示一些努力/代码我认为,id 1从1开始,在10结束,这意味着它处理重量7和重量8;计数等于2,和是20+14。顺便说一下,闻起来像是家庭作业。谢谢布雷特。你救了我一天!!