Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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 如何将数组值添加到一起,直到它们达到特定的数目,然后使用添加的值创建对象?_Javascript_Jquery - Fatal编程技术网

Javascript 如何将数组值添加到一起,直到它们达到特定的数目,然后使用添加的值创建对象?

Javascript 如何将数组值添加到一起,直到它们达到特定的数目,然后使用添加的值创建对象?,javascript,jquery,Javascript,Jquery,我有一个数组,有5个不同的宽度值,最大宽度为6,需要达到。我将如何迭代数组,并在每次到达最大值时使用这些值构建一个对象,而不进行遍历 考虑: var max_width = "6"; var max_height = "200"; var widths = [{ sku: "CSUT3", width: 3, height: 11 }, { sku: "TUS45", width: 2.5,

我有一个数组,有5个不同的宽度值,最大宽度为6,需要达到。我将如何迭代数组,并在每次到达最大值时使用这些值构建一个对象,而不进行遍历

考虑:

var max_width = "6";
var max_height = "200";
var widths = [{
        sku: "CSUT3",
        width: 3,
        height: 11
    }, {
        sku: "TUS45",
        width: 2.5,
        height: 4
    }, {
        sku: "TUS54",
        width: 6,
        height: 4
    }, {
        sku: "SRT55",
        width: 3.5,
        height: 4
    }, {
        sku: "RTS3",
        width: 3.75,
        height: 4
}];
使用宽度数组中的数据,如何创建for循环以将宽度添加到一起并创建以下数组:

var columns = [
    {
      skus: ["CSUT3", "TUS45"], 
      widths: [3, 2.5], 
      heights: [11, 4]
    },
    {
      skus: ["TUS54"], 
      widths: [6], 
      heights: [4]
    },
    {
      skus: ["SRT55"], 
      widths: [3.5], 
      heights: [4]
    },
    {
      skus: ["RTS3"], 
      widths: [3.75], 
      heights: [4]
    }
];
我可以这样循环宽度:

for (var i = 0; i < widths.length; i++) {
    alert(widths[i].width)
}
for(变量i=0;i
但是,如何将迭代次数相加,直到达到最大宽度值,并在满足条件后创建一个对象推送到列数组?

您可以在此处使用
array\reduce
方法

var max_width=“6”;
var max_height=“200”;
变量宽度=[{
sku:“CSUT3”,
宽度:3,
身高:11
}, {
sku:“TUS45”,
宽度:2.5,
身高:4
}, {
sku:“TUS54”,
宽度:6,
身高:4
}, {
sku:“SRT55”,
宽度:3.5,
身高:4
}, {
sku:“RTS3”,
宽度:3.75,
身高:4
}];
const sum=arr=>arr.reduce((a,b)=>a+b)
常数res=宽度减少((arr{
sku,
宽度,
高度
}) => {
如果(!arr.length||
总和(arr[arr.length-1].宽度)+宽度>最大宽度||
总和(arr[arr.length-1]。高度)+高度>最大高度){
arr.push({
sku:[sku],
宽度:[宽度],
高度:[高度]
})
}否则{
arr[arr.length-1].width.push(width);
arr[arr.length-1].height.push(高度);
arr[arr.length-1].sku.push(sku);
}
返回arr;
}, [])

console.log(res)
您是否还有其他限制,比如最小化元素或尝试接近所需的最大值?是否应保持顺序?@NinaScholz约束是永远不要超过最大值,只要组合宽度或单数宽度小于或等于最大值,顺序就无关紧要。