我有一个具有数字值的url数组参数。 我做研究但是我什么都没找到。
所以这是我的数组网址:units[1]=5&grade[1]=1.25&units[2]=3&grade[2]=1.50&units[3]=2&grade[3]=2.50
我需要的是获得units
和grade
简而言之,它会显示:1.25
为最低等级,2
为最低等级
用这种字符串可以做到吗?谢谢!
答案 0 :(得分:1)
我使用here通过jquery.parseparams.js
的parseParams
/* helper functions */
(function ($) { var re = /([^&=]+)=?([^&]*)/g; var decode = function (str) { return decodeURIComponent(str.replace(/\+/g, ' ')); }; $.parseParams = function (query) { function createElement(params, key, value) { key = key + ''; if (key.indexOf('.') !== -1) { var list = key.split('.'); var new_key = key.split(/\.(.+)?/)[1]; if (!params[list[0]]) params[list[0]] = {}; if (new_key !== '') { createElement(params[list[0]], new_key, value); } else console.warn('parseParams :: empty property in key "' + key + '"'); } else if (key.indexOf('[') !== -1) { var list = key.split('['); key = list[0]; var list = list[1].split(']'); var index = list[0]; if (index == '') { if (!params) params = {}; if (!params[key] || !$.isArray(params[key])) params[key] = []; params[key].push(value); } else { if (!params) params = {}; if (!params[key] || !$.isArray(params[key])) params[key] = []; params[key][parseInt(index)] = value; } } else { if (!params) params = {}; params[key] = value; } } query = query + ''; if (query === '') query = window.location + ''; var params = {}, e; if (query) { if (query.indexOf('#') !== -1) { query = query.substr(0, query.indexOf('#')); } if (query.indexOf('?') !== -1) { query = query.substr(query.indexOf('?') + 1, query.length); } else return {}; if (query == '') return {}; while (e = re.exec(query)) { var key = decode(e[1]); var value = decode(e[2]); createElement(params, key, value); } } return params; }; })(jQuery);
Array.prototype.min = function() {
return Math.min.apply(null, this);
};
function getArr(obj) {
return Object.keys(obj).map(function (key) { return obj[key]; })
}
/* Actual code */
// change the string to for example location.href to get your URL
var url = "http://example.com/?units[1]=5&grade[1]=1.25&units[2]=3&grade[2]=1.50&units[3]=2&grade[3]=2.50";
var arrs = $.parseParams(url); // now the arrays are stored as arrs={ unit:[], grade:[] }
var unitArr = getArr(arrs.units),gradeArr=getArr(arrs.grade); // extact the values only
console.log(unitArr.min(),gradeArr.min()); // grab the min of each
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
答案 1 :(得分:-1)
第一步是将此参数解析为易于操作的对象。 Other questions询问如何执行此操作,因此您只需搜索一下即可找到最适合您的方法。我发现的那个首先使用JQuery BBQ的deparam
function,这与JQuery's param
function相反。以这种方式解析您的URL参数很简单:
var params = $.deparam(urlParam);
Another answer(使用相同的方法here)展示了如何向数组原型添加一个函数,该函数将返回数组的最小元素。
Array.prototype.min = function() {
return Math.min.apply(null, this);
};
如果你使用它,获得数组的最低元素很简单:
var lowestUnits = params.units.min();
或者,如果您不希望将其添加到原型中,可以明确地将其称为:
var lowestUnits = Math.min.apply(null, params.units);
连接其他答案的样本,这里将是如何去 1 :
min
函数添加到Array的原型Array.prototype.min = function() {
return Math.min.apply(null, this);
};
// ...
var params = $.deparam('units[1]=5&grade[1]=1.25&units[2]=3&grade[2]=1.50&units[3]=2&grade[3]=2.50');
var lowestGrade = params.grade.min();
var lowestUnits = params.units.min();
var params = $.deparam('units[1]=5&grade[1]=1.25&units[2]=3&grade[2]=1.50&units[3]=2&grade[3]=2.50');
var lowestGrade = Math.min.apply(null, params.grade);
var lowestUnits = Math.min.apply(null, params.units);
1:JQuery BBQ的deparam
function不再是唯一可用的解决方案。