想使用单行使用map
或filter
次迭代在对象/数组中设置属性
目前代码看起来像这样(示例查询参数提取)...
var q = {};
var q = location.search.substr(1).split('&').map(function(a){
q[a.split('=')[0]] = a.split('=')[1] // q must be defined primarily?!
});
是否有解决方法可以在不预先定义q
变量的情况下完成此操作,可能位于
var q = location.search.substr(1).split('&').map(function(a){
this[a.split('=')[0]] = a.split('=')[1] // this doesn't work obviously
});
有什么想法吗?
答案 0 :(得分:3)
您可以使用闭包并添加一个被破坏的数组。
var q = Object.assign(...'foo=bar&baz=42'
.split('&')
.map(s => (([k, v]) => ({ [k]: v }))(s.split('=')))
);
console.log(q);

这里是ES5
var q = 'foo=bar&baz=42'
.split('&')
.reduce(function (o, s) {
return function (kv) {
o[kv[0]] = kv[1];
return o;
}(s.split('='));
}, {});
console.log(q);

答案 1 :(得分:1)
您可以使用reduce()
方法:
const locationSearch = '?a=b&c=d&e=f';
const q = locationSearch.substr(1).split('&').reduce((acc, x) => {
const [key, value] = x.split('=');
acc[key] = value;
return acc;
}, {});
console.log(q);

我在这个答案中使用了一些ES6功能:const
,arrow functions和destructuring。遗憾的是,IE10不支持这些功能,因此您必须使用Babel转换代码或不使用这些功能。下面的代码应该适用于IE10:
var locationSearch = '?a=b&c=d&e=f';
var q = locationSearch.substr(1).split('&').reduce(function (acc, x) {
var keyAndValue = x.split('=');
var key = keyAndValue[0];
var value = keyAndValue[1];
acc[key] = value;
return acc;
}, {});
console.log(q);