使用 reduce fnt 而不是 map
Using reduce fnt instead of map
关于如何使用 reduce
重构我的函数的任何建议,因为我不应该在这里使用 map
?
试试这个:
function serializeParams (object) {
return Object.keys(object)
.reduce((query, key) =>
Array.isArray(object[key])
? query.concat(object[key].map(value => `${key}=${encodeURIComponent(value)}`))
: query.concat(`${key}=${encodeURIComponent(object[key])}`)
, [])
.join('&');
}
或没有模板字符串:
function serializeParams (object) {
return Object.keys(object)
.reduce((query, key) =>
Array.isArray(object[key])
? query.concat(object[key].map(value => key + '=' + encodeURIComponent(value)))
: query.concat(key + '=' + encodeURIComponent(object[key]))
, [])
.join('&');
}
在这里使用 map
而不是 reduce
是合适的,您只应在 join
ing 之前映射到您可以 concat
的数组数组。
function serializeParams(obj) {
return Array.protoype.concat.apply([], keys(obj).map(key => {
let value = obj[key];
return Array.isArray(value)
? value.map(v => key +"=" + encodeURIComponent(v))
: [key + "=" + encodeURIComponent(value)];
})).join("&");
}
关于如何使用 reduce
重构我的函数的任何建议,因为我不应该在这里使用 map
?
试试这个:
function serializeParams (object) {
return Object.keys(object)
.reduce((query, key) =>
Array.isArray(object[key])
? query.concat(object[key].map(value => `${key}=${encodeURIComponent(value)}`))
: query.concat(`${key}=${encodeURIComponent(object[key])}`)
, [])
.join('&');
}
或没有模板字符串:
function serializeParams (object) {
return Object.keys(object)
.reduce((query, key) =>
Array.isArray(object[key])
? query.concat(object[key].map(value => key + '=' + encodeURIComponent(value)))
: query.concat(key + '=' + encodeURIComponent(object[key]))
, [])
.join('&');
}
在这里使用 map
而不是 reduce
是合适的,您只应在 join
ing 之前映射到您可以 concat
的数组数组。
function serializeParams(obj) {
return Array.protoype.concat.apply([], keys(obj).map(key => {
let value = obj[key];
return Array.isArray(value)
? value.map(v => key +"=" + encodeURIComponent(v))
: [key + "=" + encodeURIComponent(value)];
})).join("&");
}