Javascript 在数组中迭代,并根据lo dash中的条件求和一个值

Javascript 在数组中迭代,并根据lo dash中的条件求和一个值,javascript,arrays,loops,underscore.js,lodash,Javascript,Arrays,Loops,Underscore.js,Lodash,我有一个简化的数据集: var data = [{ size: 400 }, { size: 500 }, { size: 800 }, { size: 400 }, { size: 400 } { size: 300 }, { size: 300 }, { size: 800 }]; var windowWidth = 800; 使用lo dash,我将如何根据windowWidth中的大小创建一个新数组。 preferedfi

我有一个简化的数据集:

var data = [{
    size: 400
}, {
    size: 500
}, {
    size: 800
}, {
    size: 400
}, {
    size: 400
} {
    size: 300
}, {
    size: 300
}, {
    size: 800
}];
var windowWidth = 800;
使用lo dash,我将如何根据windowWidth中的大小创建一个新数组。 preferedfinal数据集如下所示

var newArray = [{
            group: [0],
            size: 400
        }, {
            group: [1],
            size: 500
        }, {
            group: [2],
            size: 800
        }, {
            group: [3, 4],
            size: 800
        }, {
            group: [5,6],
            size: 600
        }, {

            group: [7],
            size: 800,
        }
键组是指满足小于windowwidth条件的数据[n]的索引。 密钥大小是指组的累积大小

注意:数据[n]只是向上计数,永远不会重复返回数据[0]

数据[n]是否适合在窗口内? 对向小组推进;转到数据[n+1]。大小;检查表达式


没有?创建新团队;转到数据[n+1]。大小;检查表达式

看起来我已经知道你需要什么了:

var data=[{size:400},{size:500},{size:800},{size:400},{size:400},{size:300},{size:300},{size:800}], newArray=[], prevSize=0, 最新索引, 窗宽=800; forvar i=0;ialertJSON.stringifynewArray 看来我知道你需要什么了:

var data=[{size:400},{size:500},{size:800},{size:400},{size:400},{size:300},{size:300},{size:800}], newArray=[], prevSize=0, 最新索引, 窗宽=800; forvar i=0;ialertJSON.stringifynewArray 不确定这是否是最佳方法,但它仅使用lodash函数:

var indexed = _.map(data, function (e, i) {
  e['index'] = i;
  return e
});
var grouped = _.groupBy(indexed, function (e) {
  return e.size
});
var newArray = _.map(grouped, function (e, key) {
  return {'size': key, 'group': _.pluck(e, 'index')}
});
版本2 一个效率较低的版本,使用0.reduce进行分组,使用0.map将分组对象转换为对象列表。过滤掉所有大于windowWidth的大小


请参见

不确定这是否是最佳方法,但它仅使用lodash函数:

var indexed = _.map(data, function (e, i) {
  e['index'] = i;
  return e
});
var grouped = _.groupBy(indexed, function (e) {
  return e.size
});
var newArray = _.map(grouped, function (e, key) {
  return {'size': key, 'group': _.pluck(e, 'index')}
});
版本2 一个效率较低的版本,使用0.reduce进行分组,使用0.map将分组对象转换为对象列表。过滤掉所有大于windowWidth的大小



根据窗口宽度可以容纳多少尺寸?什么应该如何从源计算结果?iftempAccumlatedSizevar sum = _.chain(data).pluck('size').reduce(function(result, val, i) { if (_.isEmpty(result) || val + _.last(result).size > windowWidth) result.push({ size: val, groups: [i] }); else { var last = _.last(result); last.size += val; last.groups = last.groups || []; last.groups.push(i); } return result; }, []).value();