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;i
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的大小
看
根据窗口宽度可以容纳多少尺寸?什么应该如何从源计算结果?iftempAccumlatedSize
var 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();