JS对象数组字段依次递减,获取最终返回值

Djxiaotaiyang 2019-06-18 05:36:27

var para = 150
var array = [{PayTotal: 100},{PayTotal: 200},{PayTotal: 300}]

// 用para 去匹配array.PayTotal的字段值,从最小值开始计算 如果当前array.PayTotal大于para那么当前这条PayTotal值
// 直接等于para 然后输出 当前数组对象,删除其余对象

// 如果array.PayTotal小于para 就依次从最下值开始递减,直到不能在减,array.PayTotal等于被减掉得值,
// 然后输出被递减得array.PayTotal 移除未操作对象


求指教。不知道表达得清不清楚。在线等
...全文
348 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Djxiaotaiyang 2019-06-19
  • 打赏
  • 举报
回复
引用 3 楼 天际的海浪 的回复:
[quote=引用 2 楼 Djxiaotaiyang 的回复:] [quote=引用 1 楼 天际的海浪 的回复:] 还真没听明白,什么依次递减?你最好举个例子。
这么说,就是遍历array.PayTotal, 按最小值排序,然后用PayTotal依次跟para 去对比,比如PayTotal最小是100 para是150 那么PayTotal就等于100 然后不还剩50吗 就那PayTotal等于200得去比较 这50, 因为200大于50大。所以直接就PayTotal就等于50,如果小于50就接着往下比较。然后删除没有比较过的数据。就这样。。。。希望能表达清除。谢谢[/quote]

var para = 150;
var array = [{PayTotal: 100},{PayTotal: 200},{PayTotal: 300}];
array.sort(function(a,b){return a.PayTotal - b.PayTotal;});//如果数据是已经排序好的,这行可以去掉。
for (var i = 0; i < array.length; i++) {
	if (array[i].PayTotal < para) {
		para -= array[i].PayTotal;
	} else {
		array[i].PayTotal = para;
		array.splice(i+1);
		break;
	}
}
alert(JSON.stringify(array,null,4));

[/quote] OK了 多谢。
天际的海浪 2019-06-19
  • 打赏
  • 举报
回复
引用 2 楼 Djxiaotaiyang 的回复:
[quote=引用 1 楼 天际的海浪 的回复:] 还真没听明白,什么依次递减?你最好举个例子。
这么说,就是遍历array.PayTotal, 按最小值排序,然后用PayTotal依次跟para 去对比,比如PayTotal最小是100 para是150 那么PayTotal就等于100 然后不还剩50吗 就那PayTotal等于200得去比较 这50, 因为200大于50大。所以直接就PayTotal就等于50,如果小于50就接着往下比较。然后删除没有比较过的数据。就这样。。。。希望能表达清除。谢谢[/quote]

var para = 150;
var array = [{PayTotal: 100},{PayTotal: 200},{PayTotal: 300}];
array.sort(function(a,b){return a.PayTotal - b.PayTotal;});//如果数据是已经排序好的,这行可以去掉。
for (var i = 0; i < array.length; i++) {
	if (array[i].PayTotal < para) {
		para -= array[i].PayTotal;
	} else {
		array[i].PayTotal = para;
		array.splice(i+1);
		break;
	}
}
alert(JSON.stringify(array,null,4));

Djxiaotaiyang 2019-06-18
  • 打赏
  • 举报
回复
引用 1 楼 天际的海浪 的回复:
还真没听明白,什么依次递减?你最好举个例子。
这么说,就是遍历array.PayTotal, 按最小值排序,然后用PayTotal依次跟para 去对比,比如PayTotal最小是100 para是150 那么PayTotal就等于100 然后不还剩50吗 就那PayTotal等于200得去比较 这50, 因为200大于50大。所以直接就PayTotal就等于50,如果小于50就接着往下比较。然后删除没有比较过的数据。就这样。。。。希望能表达清除。谢谢
天际的海浪 2019-06-18
  • 打赏
  • 举报
回复
还真没听明白,什么依次递减?你最好举个例子。

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧