M = {"type":"line","x1":429,"y1":135,"x2":374,"y2":182,"x3":432,"y3":220,"x4":559,"y4":306,"x5":605,"y5":191,"x6":458,"y6":100}
我该如何从对象M中获得x,y的所有的值以及最大值与最小值?然后将x,y的最大最小值赋值给M
M = { "type": "line", "x1": 429, "y1": 135, "x2": 374, "y2": 182, "x3": 432, "y3": 220, "x4": 559, "y4": 306, "x5": 605, "y5": 191, "x6": 458, "y6": 100 }
OM = { xmax: 0, xmin: 9999999, ymax: 0, ymin: 9999999 }
for (attr in M) {
var k = attr.charAt(0);
if (OM[k + 'max'] !== undefined) OM[k + 'max'] = Math.max(OM[k + 'max'], M[attr]);
if (OM[k + 'min'] !== undefined) OM[k + 'min'] = Math.min(OM[k + 'min'], M[attr]);
}
console.log(OM)
//赋值,要改变键名称修改这里的代码
for(attr in OM)M[attr]=OM[attr]
我觉得应该先转成数组然后用
Math.max.apply(Math, 数组名);
Math.min.apply(Math, 数组名);
取得最大最小值
这是我的思路
换个思路, 为什么一定存成x1,x2呢,直接M = {"type":"line","x":[429,374,432,559,605,458],"y":[135,182,220,306,191,100]}
这样会不会你程序上更好处理
[
[x,1值y1值],
[x,2值y2值],
[x,3值y3值],
[x,4值y4值]
]
使用二维数组来表示所有的x,y的坐标不是更好吗,尤其是你x,y的坐标很多的话这种写法很致命的
var m = {"type":"line","x1":429,"y1":135,"x2":374,"y2":182,"x3":432,"y3":220,"x4":559,"y4":306,"x5":605,"y5":191,"x6":458,"y6":100};
var maxX = null
var maxY = null
for(var p in m) {
if (/x\d+/.test(p)) {
if (maxX == null || m[p] > maxX) {
maxX = m[p];
}
}
if (/y\d+/.test(p)) {
if (maxY == null || m[p] > maxY) {
maxY = m[p];
}
}
}
if (maxX != null || maxY != null) {
m = {x : maxX, y : maxY}
}
M = { "type": "line", "x1": 429, "y1": 135, "x2": 374, "y2": 182, "x3": 432, "y3": 220, "x4": 559, "y4": 306, "x5": 605, "y5": 191, "x6": 458, "y6": 100 }
var x=[],y=[];
$.each(M,function(attr,val){
if(attr.indexOf("x")!=-1){
x.push(val);
}
if(attr.indexOf("y")!=-1){
y.push(val);
}
});
//获取x的最大、最小值
var xMax=Math.max.apply(Math,x);
var xMin=Math.min.apply(Math,x);
//y最大值同上~~~~~~~~~~~~~~
M["xMax"]=xMax;
M["xMin"]=xMin
var arry = [];
var arrx = [];
for(var obj in M){
if(obj.startsWith("x")){arrx.push(M[obj])};
if(obj.startsWith("y")){arry.push(M[obj])};
}
Math.max.apply(Math,arrx)
Math.max.apply(Math,arry)
Math.min.apply(Math,arrx)
Math.min.apply(Math,arry)
题:
M = {"type":"line","x1":429,"y1":135,"x2":374,"y2":182,"x3":432,"y3":220,"x4":559,"y4":306,"x5":605,"y5":191,"x6":458,"y6":100}
我该如何从对象M中获得x,y的所有的值以及最大值与最小值?然后将x,y的最大最小值赋值给M
答:
let size = 6
// 获得x,y的所有的值
let xlist = findlist(M, size, 'x')
let ylist = findlist(M, size, 'y')
// 最大值与最小值
let xstat = getStat(xlist)
let ystat = getStat(ylist)
// 将x,y的最大最小值赋值给M
M.xstat = xstat
M.ystat = ystat
// 将data对象中由attrPrefix+1~attrPrefix+i的所有属性值放入一个数组中
function findlist(data, size, attrPrefix) {
let list = []
for(let i = size; i; i--) {
let val = data[attrPrefix + i]
if(val !== undefine) list.push(val)
}
return list
}
// 统计数组中数据的相关特性,如最大、最小
function getStat(list) {
let max = 0
let min = 0
let length = list.length
for(let i = length; i; i--) {
let index = i - 1;
let val = list[index]
if(val > max) max = val
if(val < min) min = val
}
return {max, min}
}